【发布时间】:2017-10-28 17:54:56
【问题描述】:
我想知道如何在 dplyr 方法(如 mutate)中正确地在 RHS 上使用 UQ 字符串创建变量名。请参阅我在此 MWE 的 wilcox.test 部分中的 cmets 中收到的错误消息:
require(dplyr)
dfMain <- data.frame(
base = c(rep('A', 5), rep('B', 5)),
id = letters[1:10],
q0 = rnorm(10)
)
backgs <- list(
A = rnorm(13),
B = rnorm(11)
)
fun <- function(dfMain, i = 0){
pcol <- sprintf('p%i', i)
qcol <- sprintf('q%i', i)
(
dfMain %>%
group_by(id) %>%
mutate(
!!pcol := ifelse(
!is.nan(!!qcol) &
length(backgs[[base]]),
wilcox.test(
# !!(qcol) - backgs[[base]]
# object 'base' not found
# (!!qcol) - backgs[[base]]
# non-numeric argument to binary operator
(!!qcol) - backgs[[base]]
)$p.value,
NaN
)
)
)
}
dfMain <- dfMain %>% fun()
我猜在!!(qcol) ... 它被解释为我想取消引用整个表达式,而不仅仅是变量名,这就是它找不到base 的原因?我还发现 (!!qcol) 返回字符串本身,所以 - 运算符无法处理它也就不足为奇了。
【问题讨论】: