使用非标准评估按多列排序

问题描述 投票:0回答:1

假设我要使用多列并使用非标准演变来订购data.frame。我可能有一个看起来像这样的函数

my_order <- function(data, ...) {
  with(data, order(...))
}

使用此函数时出现错误,因为未在with的上下文中评估我的列。

my_order(mtcars, mpg, cyl)
# Error in order(...) : object 'mpg' not found 

注意:我不希望在此问题上使用dplyr::arrange(),因为它增加了依赖性。

r non-standard-evaluation
1个回答
0
投票

这是使用基数R传递未解析符号的一种方法

my_order <- function(data, ...) {
  dots <- substitute(...())
  with(data, do.call("order", as.list(dots)))
}
my_order(mtcars, mpg, cyl)

基本上,我们使用替代方法来捕获符号名称,然后使用do.call将其注入到对order的调用中>

© www.soinside.com 2019 - 2024. All rights reserved.