R函数引用用户数据框中列的正确方法是什么?

时间:2016-04-19 11:29:22

标签: r function coding-style

我有一个在5列数据帧上运行的函数。最后我想发布这个功能,以便其他人可以将它与自己的数据一起使用。

设计一个允许用户传入5个必需列的函数的惯用R方法是什么?

即。我的函数想要处理一个包含(至少)列'a','b','c','d','e'的数据帧,但在用户的数据框中,它们的标记方式不同,例如' foo','bar'等...

有几种可能性,虽然没有一种对我来说特别优雅:

  • 要求用户将列分别作为5个单独的向量参数传递
  • 要求用户以指定的方式命名列,并将数据框作为单个参数传递
  • 要求用户以指定的方式对其列进行排序,并将数据框作为单个参数传递
  • 传入数据框以及由此数据框中所需列的名称组成的向量

1 个答案:

答案 0 :(得分:1)

没有一种“最好”的方法可以做到这一点。不同方法的优点根据情况而有所不同。在这个例子中,我个人的偏好是给函数(至少)两个参数:data.frame as“data”和包含变量名称的字符向量。

然后,如果您对这些操作应用相同的操作,则可以将字符向量作为sapplylapply的主要参数。

myFunc <- function(data=NULL, variables=NULL) {
  if(is.null(data) stop("need a dataset")
  if(is.null(variables) | !is.character(variables) stop("variables improperly supplied")
}
  sapply(variables, FUN=funciton(i) <doStuff to data[, i]>) 

通常最好提供变量的名称而不是它们的位置,因为位置可能会在数据集之间发生变化。