r - 使用 lazyeval 进行 mutate 的标准评估

标签 r dplyr standard-evaluation

我正在尝试使我自己的函数包装 dplyr 函数。

我有一个数据框列表,我想修改具有给定标签的指定变量的级别(两者都应该是函数的参数)。

这是我到目前为止尝试过的:

library(plyr); library(dplyr)

groups <- list(label1 = "setosa", label2 = c("virginica", "versicolor"))

iris$Species <- as.character(iris$Species)
x <- lapply(1:5, function(x) iris)

f <- function(datas, fillVar, groups) {

  fillStr <- deparse(substitute(fillVar))

  datas <- llply(datas, function(x) {
    x <- mutate_(x, .dots = setNames(list(lazyeval::interp(~ factor(var), var = substitute(fillStr))), fillStr))
    levels(x[,fillStr]) <- groups
    return(x)})

  return(datas)
}

f(x, Species, groups)

 Error in mutate_impl(.data, dots) : object 'Species' not found 

但我不能让它工作,我只是不明白为什么......
你知道我缺少什么吗?谢谢。

最佳答案

尝试

f1 <- function(datas, fillVar, groups) {
  fillStr <- deparse(substitute(fillVar))
  datas <- llply(datas, function(x) {
     x <- mutate_(x, .dots = setNames(list(lazyeval::interp(~ factor(var),
                var = as.name(fillStr))), fillStr))
    levels(x[fillStr]) <- groups
    x})
   return(datas)
}

 identical(f(x, 'Species', groups), f1(x, Species, groups))
 #[1] TRUE

关于r - 使用 lazyeval 进行 mutate 的标准评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312201/

相关文章:

r - 在向量中查找唯一的一组字符串,其中向量元素可以是多个字符串

r - 为什么 ggplot2 不允许我为每个单独的点设置大小?

R数据.表: Dynamically Update a Different Column for each Row

r - 在分组数据帧上进行变异+过滤与汇总相比有什么缺点吗?

r - 如何将字符串传递给函数中的 dplyr 过滤器?

r - 使用自动图的相关性和距离双图?

r - 过滤到特定列中的特定日期

r - 使用条件均值和 NA 生成新变量

r - 带有 ggplot2 的标准 eval 没有 `aes_string()`