考慮以下玩具問題。我想圓drat和wt。這是執行此操作的正常方法:
library(tidyverse)
mtcars[1 ,5:7] %>%
mutate(across(.cols = c(drat, wt), .fns = round))
#> drat wt qsec
#> Mazda RX4 4 3 16.46
但我想要做的是選擇drat和wt從資料。如下所示(不運行)。我該怎么做?
mtcars_2 <-
mtcars[1 ,5:7] %>%
bind_cols(data.frame(cols_to_modify = "c(drat, wt)"))
## view data
mtcars_2
#> drat wt qsec cols_to_modify
#> Mazda RX4 3.9 2.62 16.46 c(drat, wt)
## my failed attempt
mtcars_2 %>%
mutate(across(.cols = eval(substitute(.$cols)),.fns = round))
#> Error: Problem with `mutate()` input `..1`.
#> ? `..1 = across(.cols = eval(substitute(.$cols)), .fns = round)`.
#> x Can't subset columns that don't exist.
#> x Column `c(drat, wt)` doesn't exist.
由reprex 包(v2.0.1)于 2021 年 10 月 25 日創建
uj5u.com熱心網友回復:
您不能在字符向量上使用substitute()或eval()。您需要將這些字符向量決議為語言物件。否則,當您評估一個字串時,您只會取回該字串。這與eval其他語言不同。進行決議的一種方法是str2lang. 然后,您可以將該運算式注入acrossusing tidy evaluation 的!!. 例如
mtcars_2 %>%
mutate(across(.cols = !!str2lang(.$cols_to_modify),.fns = round))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336905.html
上一篇:RShiny:從模塊內更改選項卡
下一篇:日歷日期排序:職業概覽
