gpt4 book ai didi

r - lapply 是如何工作的 - lapply dcast?

转载 作者:行者123 更新时间:2023-12-05 01:32:41 25 4
gpt4 key购买 nike

显然,我仍然不完全理解 lapply 到底是如何工作的。当然,它对列表元素应用一个函数并返回一个列表。然而,当将它与自定义函数一起使用时,我不太确定如何有效地使用它。例如,我想在使用 dcast 的自定义函数中使用它。

首先让我们得到一个示例数据集:

df1 <- data.frame(idx=c(rep("a",3),rep("b",3),rep("c",3)),
cat=rep(1:3,3),var1=rnorm(9,0,1)
)



df2 <- data.frame(idx=c(rep("a",4),rep("b",4),rep("c",4)),
cat2=rep(1:4,3),var1=rnorm(12,0,1)
)

mylist <- list(cat=df1,cat2=df2)


library(reshape2)

### result that I want to get just for one data.frame
dcast(df1,idx~cat,value_var="var1")

但我不能让它与 lapply 搭配,我试过:
lapply(mylist,function(x) substitute(dcast(x,idx~x,value_var="var1")))
## returns
$cat
dcast(X[[2L]], idx ~ X[[2L]], value_var = "var1")

显然 X[[2L]] 在计算表达式时不起作用。进一步我试过
lapply(names(mylist), function(x) dcast(mylist[[x]],idx~x,value_var="var1" ))

这是在一些类似的工作 issue ,但在这里引起了错误。我应该在这里使用吗?

编辑:
我很惊讶约书亚的答案正是我想要的。我之前也在这条路上,但当我尝试时很早就驳回了它:
 test <- function(x){
myformula <- as.formula(paste("idx~",x,sep=""))
myformula
}

test(df2)
## returns
## > idx ~ c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
## > <environment: 0x104f0a4d8>

显然为时过早,但你能解释一下会发生什么吗?

最佳答案

在您的第一个示例中,x是传递给函数的对象。在第二个示例中,它是一个字符串。在这两种情况下,它都不是代表 data 中的变量的符号。传递给 dcast .

您需要使用列表元素的名称构建公式,如下所示:

# define the function
myfunc <- function(varname) {
# 'varname' is a character string naming the column to use
myformula <- as.formula(paste("idx~",varname,sep=""))
dcast(mylist[[varname]], myformula, value_var="var1")
}
# loop over list elements, by name
lapply(names(mylist), myfunc)

关于r - lapply 是如何工作的 - lapply dcast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082047/

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