我想知道如何在UQ
方法(例如dplyr
)中正确地mutate
在RHS上创建变量名称wilcox.test
。请参阅本MWE的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)
?我还发现-
返回字符串本身,所以public static bool IsValidDate(object value)
{
DateTime dateTime;
var isValid = DateTime.TryParseExact(Convert.ToString(value),
"YYYY-MM-DD",
CultureInfo.CurrentCulture,
DateTimeStyles.None,
out dateTime);
return (isValid);
}
运算符无法处理它就不足为奇了。
答案 0 :(得分:2)
通过将您定义qcol
的行更改为:
qcol <- as.symbol(sprintf('q%i', i))
也就是说,由于qcol
是一个字符串,因此您需要在取消引用之前将其变为符号,以便在mutate
中正确评估它。另外,我假设您要引用的列是您在数据中定义的q0
列,而不是名为qval0
的不存在的列。