2

我有一个功能:

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

我希望能够通过向函数提供 2 个参数来找到列号。

示例参数:数据,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 回答