您的函数不起作用,因为虽然必须引用列名(您这样做了),但参数和引用的列名应该是相反的。该问题已在此答案的底部得到解决。
不过,首先,我想指出这是一种非常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