R 函数引用用户数据框中的列的正确方法?
Correct way for R function to reference columns in user's dataframe?
我有一个函数可以对数据框的 5 列进行操作。最终我想发布这个功能,以便其他人可以使用它来处理他们自己的数据。
设计允许用户传入 5 个必需列的函数的惯用 R 方法是什么?
即我的函数想要处理包含(至少)列 'a'、'b'、'c'、'd'、'e' 的数据框,但在用户数据中frame 它们的标记不同,例如 'foo'、'bar' 等...
有几种可能性,尽管 none 有些对我来说特别优雅:
- 要求用户将列作为 5 个单独的向量参数分别传入
- 要求用户以指定方式命名他们的列并将数据框作为单个参数传递
- 要求用户以指定方式对列进行排序,并将数据框作为单个参数传入
- 传入数据框以及一个向量,该向量由该数据框中所需列的名称组成
没有一种 "best" 方法可以做到这一点。不同方法的优点因情况而异。在这种情况下,我个人的偏好是给函数(至少)两个参数:data.frame 作为 "data" 和包含变量名称的字符向量。
然后,如果您对这些中的每一个应用相同的操作,您可以将字符向量作为主要参数提供给 sapply
或 lapply
。
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]>)
通常最好提供变量的名称而不是它们的位置,因为位置可能会在数据集之间发生变化。
我有一个函数可以对数据框的 5 列进行操作。最终我想发布这个功能,以便其他人可以使用它来处理他们自己的数据。
设计允许用户传入 5 个必需列的函数的惯用 R 方法是什么?
即我的函数想要处理包含(至少)列 'a'、'b'、'c'、'd'、'e' 的数据框,但在用户数据中frame 它们的标记不同,例如 'foo'、'bar' 等...
有几种可能性,尽管 none 有些对我来说特别优雅:
- 要求用户将列作为 5 个单独的向量参数分别传入
- 要求用户以指定方式命名他们的列并将数据框作为单个参数传递
- 要求用户以指定方式对列进行排序,并将数据框作为单个参数传入
- 传入数据框以及一个向量,该向量由该数据框中所需列的名称组成
没有一种 "best" 方法可以做到这一点。不同方法的优点因情况而异。在这种情况下,我个人的偏好是给函数(至少)两个参数:data.frame 作为 "data" 和包含变量名称的字符向量。
然后,如果您对这些中的每一个应用相同的操作,您可以将字符向量作为主要参数提供给 sapply
或 lapply
。
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]>)
通常最好提供变量的名称而不是它们的位置,因为位置可能会在数据集之间发生变化。