我是R的新手。上周,我有一个漫长而复杂的功能。该程序让我选择一个列的子集并对该子集进行各种操作。该函数必须工作'function(arg1 = first_header_name,arg2 = second_header_name,....)'。我已经清除了控制台,删除了旧的历史文件。我再次阅读了手册,我检查了.csv文件,以确保所有内容仍然相同。我已经回去并一步一步地重新设计它,我就有了这个新问题发生的地方。由于这是一个非常长的功能,我只会在突然无效的部分的简化版本中重现它。
elbow <- function(arg1,arg2) {
my_data <- read.csv("data.csv", header=TRUE, sep=",")
average_A <- (arg1 + arg2)
average_A
}
elbow(A3,A5)
# Error in elbow(A3, A5) : object 'A3' not found
列标题为A3,A4,A5,A7,A8,A9,B2,B3,B5,B6,B7,B9
我犯了什么愚蠢的小错误?这让我很沮丧。它必须是微不足道的。
答案 0 :(得分:9)
这是我对你想要的方式的猜测:
elbow <- function(arg1,arg2) {
my_data <- read.csv("data.csv", header=TRUE, sep=",")
average_A <- my_data[[arg1]] + my_data[[arg2]] # "[[" evaluates args
average_A
}
elbow('A3','A5') # entered a character literals
您应该意识到my_data的其余部分已经蒸发并在从elbow
调用返回后被垃圾收集。我本可以向你展示如何在attach()
之后使用原始表达式,这可能在该功能中可以说是安全的,但这会违反我的宗教原则。
答案 1 :(得分:4)
在上一次会话中,您可能在工作区中有了名为A3或A5的对象(显式定义,或者您已加载并attach
编辑数据。该函数正在运行,因为那些对象在那里,但它实际上并没有按照您的想法进行,因此在具有新工作空间的新会话中 - 没有这些对象 - 它不起作用。您编写的函数实际上并没有对您在其中读取的数据集(my_data
)执行任何操作;我怀疑你想要这样的东西:
elbow <- function(arg1, arg2) {
my_data <- read.csv("data.csv",header=TRUE,sep=",")
average_A <- my_data[,arg1] + my_data[,arg2]
return(average_A)
}
调用函数时还需要使用引号,例如
elbow('A3','A5')