dplyr :: mutate unquote RHS

时间:2017-10-28 17:54:57

标签: r dplyr nse rlang

我想知道如何在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); } 运算符无法处理它就不足为奇了。

1 个答案:

答案 0 :(得分:2)

通过将您定义qcol的行更改为:

,您的代码应该按预期工作
qcol <- as.symbol(sprintf('q%i', i))

也就是说,由于qcol是一个字符串,因此您需要在取消引用之前将其变为符号,以便在mutate中正确评估它。另外,我假设您要引用的列是您在数据中定义的q0列,而不是名为qval0的不存在的列。