gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:40:17 25 4
gpt4 key购买 nike

我正在尝试使我自己的函数包装 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com