我想知道如何正确地 UQ 字符串在中的RHS上创建变量名 dplyr 方法如下 mutate . 查看我在 wilcox.test 本MWE的一部分:
UQ
dplyr
mutate
wilcox.test
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) - 操作员无法处理。
!!(qcol) ...
base
(!!qcol)
-
通过更改定义行,您的代码应该按预期工作 qcol 收件人:
qcol
qcol <- as.symbol(sprintf('q%i', i))
也就是说,因为 qcol 如果是字符串,则需要将其转换为符号,然后才能在 mutate . 另外,我想你想提到的专栏是 q0 您在数据中定义的列,而不是名为 qval0 .
q0
qval0