1
我在想如何正确UQ
字符串在dplyr
方法如mutate
方法创建在RHS上的变量名称。见我在评论这个MWE的wilcox.test
部分得到了错误的信息:dplyr :: mutate unquote RHS
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)
返回字符串本身,因此-
运算符无法处理它。
谢谢Mikko!确实'q0'我会修正这个错字。我还发现'(!! as.name(qcol))'工作,如果我离开'qcol'作为一个字符串。 – deeenes