小编Yuk*_*mon的帖子

为什么 !!(bang-bang) 结合 as.name() 给出与 !! 不同的输出。还是 as.name() 单独?

我使用动态变量(例如ID)作为引用列名的方式,该列名将根据我当时正在处理的基因而改变。然后我使用case_wheninsidemutate创建一个新列,该列的值取决于动态列。

我认为!!(bang-bang) 是我强制对变量内容进行 eval 所需要的;但是,我没有在我的新专栏中得到预期的输出。只有!!as.name给了我期望的输出,我不完全明白为什么。有人可以解释为什么在这种情况下使用 only!!是不合适的,以及发生了!!as.name什么?

这是我制作的一个简单的可重现示例,用于演示我所体验的内容:

library(tidyverse)

ID <- "birth_year"

# Correct output
test <- starwars %>%
  mutate(FootballLeague = case_when(
    !!as.name(ID) < 10 ~ "U10",
    !!as.name(ID) >= 10 & !!as.name(ID) < 50 ~ "U50",
    !!as.name(ID) >= 50 & !!as.name(ID) < 100 ~ "U100",
    !!as.name(ID) >= 100 ~ "Senior",
    TRUE ~ "Others"
  ))

# Incorrect output
test2 <- starwars %>%
  mutate(FootballLeague = case_when(
    !!(ID) < 10 …
Run Code Online (Sandbox Code Playgroud)

r dplyr nse tidyverse tidyeval

12
推荐指数
1
解决办法
344
查看次数

标签 统计

dplyr ×1

nse ×1

r ×1

tidyeval ×1

tidyverse ×1