0

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

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

4

2 回答 2

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调用返回后消失并被垃圾收集。我本可以向您展示如何使用您的原始表达式 following attach(),这在该功能中可以说是安全的,但这违反了我的宗教原则。

于 2013-01-22T23:05:45.130 回答
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')
于 2013-01-22T23:02:03.820 回答