我使用动态变量(例如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)