我之前问过一个关于如何在没有引号的情况下接受文本/字符参数的问题。在我在那个问题中提供的场景中,参数的数量是固定的,所以我在函数定义中使用的 eval(substitute()) 的数量对应于我拥有的参数的数量。
现在我有一个场景,我有一个参数,例如factors
(见下文),并且用户可以指定多个列名而不使用它们周围的引号 - 即,它们将使用factor1
而不是"factor1"
. 我想评估用户提供的每个列名。
foo<-function(data.frame, factors){
}
问题1:我想知道当表达式的数量可以变化时,是否有一种方法可以将 eval(substitute()) 应用于多个表达式。
正如所指出的, eval(substitute()) 可能具有潜在的危险,并且在某些情况下可能会失败。
问题2:除了使用引用的列名之外,还有更优雅的方法来处理这个问题,如下所示:
foo<-function(data.frame, factors){
output<-data.frame[, factors]
output
}
foo(data.frame=dataset, factors=c("factor1", "factor2"))