在 rlang 中声明一个没有反引号的 sym
Declaring a sym without backticks in rlang
我正在定义这样一个函数;
afun <- function(formula,data,level){
dataname <- rlang::sym(deparse(substitute(data)))
call('somefunction',formula = formula,data = dataname,vec = c(2,3,4),level = level)
}
当我使用这些变量时,它return就是这样;
+ afun(Sepal.Width ~ Petal.Length,iris,4)
- somefunction(formula = Sepal.Width ~ Petal.Length, data = iris,
vec = c(2, 3, 4), level = 4)
但是当我像这样在 data
参数中使用额外的表达式时;
+ afun(Sepal.Width ~ Petal.Length,na.omit(iris),4)
- somefunction(formula = Sepal.Width ~ Petal.Length, data = `na.omit(iris)`,
vec = c(2, 3, 4), level = 4)
它 return 带有反引号。
我应该如何实现 return na.omit(iris) 而不是 `na.omit(iris)` 的功能?
提前致谢。
您打算将 na.omit(iris)
解释为 调用,而不是单个 符号。使用 substitute
时您已经捕获了调用,但由于某种原因,您使用 deparse
将其转换为字符串,然后将 that 转换为单个 符号 使用 rlang::sym
。出现反引号是因为您已告诉 rlang 将字符串转换为单个符号,而不是将其保留为调用。
为什么不单独使用 substitute
?它很简单,不需要额外的包。
afun <- function(formula, data, level) {
call('somefunction',
formula = formula,
data = substitute(data),
vec = c(2, 3, 4),
level = level)
}
afun(Sepal.Width ~ Petal.Length, na.omit(iris), 4)
#> somefunction(formula = Sepal.Width ~ Petal.Length, data = na.omit(iris),
#> vec = c(2, 3, 4), level = 4)
想用rlang
可以用enexpr
afun <- function(formula,data,level){
dataname <- rlang::enexpr(data)
call('somefunction',formula = formula,data = dataname,vec = c(2,3,4),level = level)
}
-测试
afun(Sepal.Width ~ Petal.Length,na.omit(iris),4)
somefunction(formula = Sepal.Width ~ Petal.Length, data = na.omit(iris),
vec = c(2, 3, 4), level = 4)
我正在定义这样一个函数;
afun <- function(formula,data,level){
dataname <- rlang::sym(deparse(substitute(data)))
call('somefunction',formula = formula,data = dataname,vec = c(2,3,4),level = level)
}
当我使用这些变量时,它return就是这样;
+ afun(Sepal.Width ~ Petal.Length,iris,4)
- somefunction(formula = Sepal.Width ~ Petal.Length, data = iris,
vec = c(2, 3, 4), level = 4)
但是当我像这样在 data
参数中使用额外的表达式时;
+ afun(Sepal.Width ~ Petal.Length,na.omit(iris),4)
- somefunction(formula = Sepal.Width ~ Petal.Length, data = `na.omit(iris)`,
vec = c(2, 3, 4), level = 4)
它 return 带有反引号。
我应该如何实现 return na.omit(iris) 而不是 `na.omit(iris)` 的功能?
提前致谢。
您打算将 na.omit(iris)
解释为 调用,而不是单个 符号。使用 substitute
时您已经捕获了调用,但由于某种原因,您使用 deparse
将其转换为字符串,然后将 that 转换为单个 符号 使用 rlang::sym
。出现反引号是因为您已告诉 rlang 将字符串转换为单个符号,而不是将其保留为调用。
为什么不单独使用 substitute
?它很简单,不需要额外的包。
afun <- function(formula, data, level) {
call('somefunction',
formula = formula,
data = substitute(data),
vec = c(2, 3, 4),
level = level)
}
afun(Sepal.Width ~ Petal.Length, na.omit(iris), 4)
#> somefunction(formula = Sepal.Width ~ Petal.Length, data = na.omit(iris),
#> vec = c(2, 3, 4), level = 4)
想用rlang
enexpr
afun <- function(formula,data,level){
dataname <- rlang::enexpr(data)
call('somefunction',formula = formula,data = dataname,vec = c(2,3,4),level = level)
}
-测试
afun(Sepal.Width ~ Petal.Length,na.omit(iris),4)
somefunction(formula = Sepal.Width ~ Petal.Length, data = na.omit(iris),
vec = c(2, 3, 4), level = 4)