Rlang:如何将字符串视为符号

jza*_*dra 5 r tidyverse rlang

我再次对文档rlang和错误消息感到困惑。我已经使用双刘海和三重刘海、 、 、 、 以及其他所有名称不明确的 rlang 函数尝试了 20 种:=不同quoenquo迭代ensym

如果您感到沮丧,那是因为每次我尝试使用rlang处理对象名称的变量时都会遇到同样的问题。我错过了一些重要的事情吗?我是傻子吗?函数rlang名称和文档真的很差吗?

我正在尝试确定 a 中变量的类tibble。除了帮助执行此操作之外,如果有人可以建议我如何在文档中找到此问题的答案,我将不胜感激。

require(tidyverse)
require(rlang)

x <- enframe(names(mtcars), name = NULL, value = "var") %>% 
  add_column(df = "mtcars")

x %>% mutate(cls = class(sym(paste0(df, "$", var))))
#> Only strings can be converted to symbols
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2019-10-27 创建

G. *_*eck 4

1)解析并评估。

library(dplyr)
library(rlang)

x %>% rowwise %>% mutate(cls = class(eval_tidy(parse_expr(paste0(df, "$", var)))))
Run Code Online (Sandbox Code Playgroud)

2)或使用symrlang 和pullpurrr

library(dplyr)
library(purrr)
library(rlang)

x %>% rowwise %>% mutate(cls = class(pull(eval_tidy(sym(df)), var)))
Run Code Online (Sandbox Code Playgroud)

3)或基本 R 函数get来检索df

library(dplyr)

x %>% rowwise %>% mutate(cls = class(get(df)[[var]]))
Run Code Online (Sandbox Code Playgroud)