我应该使用哪个rlang函数评估胶字符串作为变量名称?
假设我想创建一个函数,要在 dplyr :: mutate()
中,并且在其中添加一个变量名称,并且在该函数中,它将在变量名称中提取特定模式给定并创建一个新的变量名称,就像是这样的:
library(rlang)
library(dplyr)
library(stringr)
library(glue)
myfun <- function(var) {
y <- str_remove(ensym(var), "^.*\\.")
other_var <- glue("Petal.{y}")
if_else(var > 6 | other_var > 3, 1, 0) # What rlang function do I need to apply to other_var here?
}
我遇到的问题是如何使用rlang工具在数据框架内评估新的变量名称“ ether_var”,以便当我进行调用时下面,它将查看 iris $ sepal.length
和 iris $ petal.length
中的数据?
mutate(iris, test = myfun(Sepal.Length))
编辑:下面解决了我的直接问题,但我觉得有一种更优雅的方法:
myfun <- function(df, x) {
y <- str_remove(ensym(x), "^.*\\.")
other_var <- glue("Petal.{y}")
if_else(x > 6 | df[[other_var]] > 3, 0, 1)
}
mutate(iris, test = myfun(iris, Sepal.Length))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用环境并调用
eval_tidy()
。这使用
caller_env(n = 1)
:这将抓取
var
作为quosuse并使用该环境,如果您从原始突变呼叫中嵌套了函数,这可能很有用。You can use the environment and call
eval_tidy()
.This uses
caller_env(n = 1)
:This grabs the
var
as a quosure and uses that environment, which could be useful if you had nested functions down from the original mutate call.获取数据
我们可以使用
CUR_DATA_ALL()
-testingWe could get the data with
cur_data_all()
-testing
您可以使用
rlang :: Caller_env
(或parent.frame.frame.frame
)从其呼叫环境中获取变量,以避免rlang
依赖关系(如果需要))和获取
IT。从那里您只需使用新变量运行所需的代码:在2022-06-28上由(v2.0.1)
更新更多
rlang
面向方案:在2022-06-29上创建的
You can fetch the variable from its call environment with
rlang::caller_env
(orparent.frame
to avoidrlang
dependency if that is desired) andget
it. From there you just run the code you want with the new variable:Created on 2022-06-28 by the reprex package (v2.0.1)
Update more
rlang
oriented solution:Created on 2022-06-29 by the reprex package (v2.0.1)