【发布时间】:2020-04-15 23:01:22
【问题描述】:
我试图通过传递列名的字符串来获取 tibble 中的列类。像往常一样,rlang 的文档非常难以理解,以至于我无法弄清楚如何将字符串评估为实际对象,并且我所做的尝试返回了“quosure”或“name”类。
require(tidyverse)
#> Loading required package: tidyverse
suppressPackageStartupMessages(library(rlang))
(colstable <- mtcars %>% names %>% enframe(name = NULL, value = "column"))
#> # A tibble: 11 x 1
#> column
#> <chr>
#> 1 mpg
#> 2 cyl
#> 3 disp
#> 4 hp
#> 5 drat
#> 6 wt
#> 7 qsec
#> 8 vs
#> 9 am
#> 10 gear
#> 11 carb
colstable %>%
mutate(colclass = class(sym(paste0("mtcars$", column))))
#> Error: Only strings can be converted to symbols
#This crashes Rstudio immediately:
#colstable %>%
#mutate(colclass = class(quo(paste0("mtcars$", column))))
class(sym("mtcars$mpg"))
#> [1] "name"
class(quo("mtcars$mpg"))
#> [1] "quosure" "formula"
#Desired output would be the classes as produced by str()
str(mtcars)
#> 'data.frame': 32 obs. of 11 variables:
#> $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#> $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
#> $ disp: num 160 160 108 258 360 ...
#> $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
#> $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
#> $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
#> $ qsec: num 16.5 17 18.6 19.4 17 ...
#> $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
#> $ am : num 1 1 1 0 0 0 0 0 0 0 ...
#> $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
#> $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
#Ie, all the values of "colclass" should be "num"
由reprex package (v0.3.0) 于 2020-04-15 创建
【问题讨论】: