R语言函数参数引用数据文件

时间:2016-03-24 16:20:13

标签: r function

在线性模型函数中,可以写:

result <- lm(r ~ N, data = ds)

函数知道在数据帧ds中查找变量r和N

我写了一个名为Check.Data的函数。参数ri和ni是数据文件ds中的变量。

Check.Data(ri = ds$r, ni = ds$N, data = ds)  #This runs
Check.Data(ri = r, ni = N, data = ds)  #this does not

对函数的第二次调用没有运行,因为它找不到r: Check.Data出错(ri = r,ni = N,data = ds):找不到对象'r'

我需要在函数中使用哪些命令,以便它知道ri和ni的参数是ds中的变量而不必指定数据集(例如,ri = ds $ r,ni = ds $ N)?< / p>

如果你想看看这个功能,这里是:

Check.Data <- function(ri= ri, ni=ni, data = data)
  {

  #make sure values needed are non-missing
  if (missing(data))  stop("Function CheckData is terminated because data set name is missing.") 

  if (missing(ri))  stop("Function CheckData is terminated because ri is missing.") 

  if (missing(ni)) stop("Function CheckData is terminated because ni is missing.")  

  #add ri and ni to the data frame named data
  data$ri <- ri
  data$ni <- ni

  #make sure ri is numeric
  if(is.numeric(data$ri) == FALSE) stop("Function CheckData is terminated because ri is not numeric.") 

  #make sure ni is numeric
  if(is.numeric(data$ni) == FALSE) stop("Function CheckData is terminated because ni is not integer.") 


  #does ri have any missing data. if so issue message and stop
  if(any(ind.na <- is.na(data$ri))) stop(paste("ri has", sum(ind.na), "missing values. CheckData is terminated."))

  #does ni have any missing data. if so issue message and stop
  if(any(ind.na <- is.na(data$ni))) stop(paste("ni has", sum(ind.na), "missing values. CheckData is terminated."))

}

1 个答案:

答案 0 :(得分:2)

R函数通常会尝试在他们调用的环境中评估它们的形式参数。对象列不是R中的第一类对象,因此除非在名称为puts "10".to_s.split.inspect # gives ==> ["10"] puts "10".to_s.split('',2).inspect # gives ==> ["1", "0"] r的调用环境中存在向量(或其他数据对象),否则第二种类型的调用将失败(除非你需要特别努力)。您希望该函数将在N的环境中将某些参数作为符号进行评估。正如约兰所指出的那样,这被称为NSE(非标准评估)。执行它的常用函数之一是data或其近亲[{1}}。您可以看到library中的第一个操作是将符号字符串转换为字符值。然后可以使用require - 函数

安全地使用它来访问列值
require