【发布时间】:2014-10-16 21:49:29
【问题描述】:
我正在尝试编写一个函数,该函数将打开一些 .csv 文件并对这些数据帧的特定部分进行多次计算。我无法在函数中将列名作为参数传递,我不知道为什么。所以像这样(最小的工作示例,我的功能比这更复杂):
MyFunction <- function(file, columnname){
data <- read.table(file,sep=",",header=TRUE);
mean(data$columnname);
}
我的桌面上有一个名为“test.csv”的 .csv,其中只有一个名为“数字”的列和 1:10 的数字。如果我运行其中任何一个:
MyFunction("~/Desktop/test.csv",numbers)
MyFunction("~/Desktop/test.csv","numbers")
我收到此错误:
[1] NA
Warning message:
In mean.default(data$columnname) :
argument is not numeric or logical: returning NA
但是,如果我运行这个:
data <- read.table("~/Desktop/test.csv",sep=",",header=TRUE);
mean(data$numbers);
我明白了:
[1] 5.5
...这就是我想要的。
我不确定我的功能与在这里手动操作有何不同。我可以使用函数参数来查找并打开文件,但是在 data$parameter 中使用函数参数似乎会导致错误。为什么是这样?有什么解决方法?
【问题讨论】:
-
您可以只使用括号索引而不是
$索引。例如,使用Idx <- match(columnname,names(data))和mean(data[,Idx])之类的内容获取列号。 -
我实际上最终使用了这个,虽然两个答案都非常有帮助!