使用 get() 和 eval() 在 dplyr 函数中传递参数
use get() and eval() to pass argument in dplyr functions
我正在尝试编写我的函数并且需要在内部传递参数。
以 mtcars 数据集为例:
get.param <- function(data, var){
data %>% select(eval(var)) %>%
head()
}
get.param(mtcars, 'hp')
在上面的函数中,将 eval() 替换为 get() 出现了错误。
我有点困惑我应该使用哪个。我使用 get() 我一些其他功能和工作。这两者有什么区别?
您可以通过
让它工作
get.param <- function(data, var){
var <- enquo(var)
data %>% select(!!var) %>%
head()
}
get.param(mtcars, hp)
hp
Mazda RX4 110
Mazda RX4 Wag 110
Datsun 710 93
Hornet 4 Drive 110
Hornet Sportabout 175
Valiant 105
通常不使用 get
或 eval
与 dplyr。请参阅 rlang 包中的小插图,了解如何使用该包完成;但是,在这种特殊情况下,可以直接将 var
传递给 select
,并在其周围添加括号,这样就不会将其与名为 "var"
的列混淆(如果它存在的话)。如果您不担心这种极端情况,您可以省略括号。
get.param <- function(data, var) {
data %>% select((var)) %>% head
}
get.param(mtcars, 'hp')
给予:
hp
Mazda RX4 110
Mazda RX4 Wag 110
Datsun 710 93
Hornet 4 Drive 110
Hornet Sportabout 175
Valiant 105
另一种可能性是像这样使用 ...
并给出相同的答案。在这个变体中,我们不需要添加括号来消除边缘情况。它还允许指定多个列。
get.param <- function(data, ...) {
data %>% select(...) %>% head
}
get.param(mtcars, 'hp')
我正在尝试编写我的函数并且需要在内部传递参数。 以 mtcars 数据集为例:
get.param <- function(data, var){
data %>% select(eval(var)) %>%
head()
}
get.param(mtcars, 'hp')
在上面的函数中,将 eval() 替换为 get() 出现了错误。 我有点困惑我应该使用哪个。我使用 get() 我一些其他功能和工作。这两者有什么区别?
您可以通过
让它工作get.param <- function(data, var){
var <- enquo(var)
data %>% select(!!var) %>%
head()
}
get.param(mtcars, hp)
hp
Mazda RX4 110
Mazda RX4 Wag 110
Datsun 710 93
Hornet 4 Drive 110
Hornet Sportabout 175
Valiant 105
通常不使用 get
或 eval
与 dplyr。请参阅 rlang 包中的小插图,了解如何使用该包完成;但是,在这种特殊情况下,可以直接将 var
传递给 select
,并在其周围添加括号,这样就不会将其与名为 "var"
的列混淆(如果它存在的话)。如果您不担心这种极端情况,您可以省略括号。
get.param <- function(data, var) {
data %>% select((var)) %>% head
}
get.param(mtcars, 'hp')
给予:
hp
Mazda RX4 110
Mazda RX4 Wag 110
Datsun 710 93
Hornet 4 Drive 110
Hornet Sportabout 175
Valiant 105
另一种可能性是像这样使用 ...
并给出相同的答案。在这个变体中,我们不需要添加括号来消除边缘情况。它还允许指定多个列。
get.param <- function(data, ...) {
data %>% select(...) %>% head
}
get.param(mtcars, 'hp')