2

私は機能を持っています:

findcolnumber <- function(df, thecolumnname){
which(colnames(df) == "thecolumnname")
}

そして、関数に2つの引数を与えることで列番号を見つけられるようにしたいと思います.

引数の例: data、columnX

which(colnames(data) == "columnX")    #This works properly

findcolnumber(data, columnX)    #This does not work

作成した機能が動作しません。なぜなのかご存知ですか?

4

1 に答える 1

5

列名は引用符で囲む必要がありますが (これは実行しました)、引数と引用符で囲まれた列名は逆でなければならないため、関数が機能していません。その問題は、この回答の最後で修正されています。

deparseただし、最初に、これが非常にsubstitute便利な状況であることを指摘したいと思います。一緒に、関数の引数を引用する必要がなくなります。次に例を示します。

> findcolnumber <- function(df, thecolumnname){
      which(colnames(df) == deparse(substitute(thecolumnname)))
  }

> x <- data.frame(col1 = 1:4, col2 = 3:6, col3 = letters[1:4])

> findcolnumber(x, col1)
[1] 1
> findcolnumber(x, col2)
[1] 2
> findcolnumber(x, col3)
[1] 3

ここで、逆解析と置換を行わずに実行したい場合は、次のようにすることができます。関数呼び出しで列名を引用する必要があることに注意してください。だからこそdeparse(substitute(...))素敵です。

> findcolnumber <- function(df, thecolumnname){
      which(colnames(df) == thecolumnname)
  }
> findcolnumber(x, "col3")
[1] 3
于 2014-06-06T23:05:49.147 に答える