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

问题描述 投票:2回答:2

再次,我对rlang的文档和错误消息感到困惑。我已经尝试使用两次和三次爆炸,:=quoenquoensym以及其他所有不清楚命名的rlang函数进行20种不同的迭代。

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

我正在尝试确定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

reprex package(v0.3.0)在2019-10-27创建

r tidyverse rlang
2个回答
0
投票

paste0只能传入字符串,并且所有列名称中都带有“ NA”。可能会导致问题:var NA df

x %>% mutate(cls = class(sym(paste0(df, "$", var))))
Error in mutate_impl(.data, dots) : Column `2` cannot have NA as name

所以我这样做了:

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

然后我一次只检查一列:

> class(sym(paste0('x$df', "$", '1')))
[1] "name"

我认为它可行。希望对您有所帮助。


0
投票

1]解析并求值。

library(dplyr)
library(rlang)

x %>% rowwise %>% mutate(cls = class(eval_tidy(parse_expr(paste0(df, "$", var)))))

[2)或使用rlang中的sym和purrr中的pull

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

x %>% rowwise %>% mutate(cls = class(pull(eval_tidy(sym(df)), var)))

3)或基R函数get以检索df

library(dplyr)

x %>% rowwise %>% mutate(cls = class(get(df)[[var]]))
© www.soinside.com 2019 - 2024. All rights reserved.