0

cast,从reshape2包中,如果直接在调用中传递,可以处理一堆函数。例如:

library(reshape2)

d <- data.frame(variable="variable",value=rnorm(100))
cast(d, variable ~ ., c(mean,sd,max,min))

但是,如果您尝试事先构建函数列表,这将不起作用。例如:

summary.fun <- c(mean,sd,max,min)
cast(d, variable ~., summary.fun) 

我查看了处理这种特殊行为的 cast 代码,老实说,我不知道它在做什么:

if (length(fun.aggregate) > 1) 
        fun.aggregate <- do.call(funstofun, as.list(match.call()[[4]])[-1])

有没有办法将预先制作的函数列表作为变量传递给cast()

4

1 回答 1

4

您的函数必须使用输入参数。该函数cast自动将值作为第一个参数传递给函数。此外,您必须告诉 R 这summary.fun是一个使用<- function().

summary.fun <- function(x) list(mean(x), sd(x), max(x), min(x))

试试这个功能cast

library(reshape)

d <- data.frame(variable="variable",value=rnorm(100))

cast(d, variable ~ ., summary.fun)

正如@handley 指出的那样,这不适用于包中的cast功能reshape2。你应该看看dcastand acast

于 2012-12-01T10:46:13.153 回答