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