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