R问题“找不到对象”

时间:2013-01-22 22:46:53

标签: r

我是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

我犯了什么愚蠢的小错误?这让我很沮丧。它必须是微不足道的。

2 个答案:

答案 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')