我正在使用dlply将函数应用于data.frame并为每个因子组合生成一个列表:
首先我生成一些数据
is1 <- data.frame()
for( s in c("Big","Med", "Sma")) {
for(i in 1:3){
c <- rnorm(1,0,10)
n <- rnorm(1,-1,10)
is1 <- rbind(is1,data.frame(Site=i,SizeClass=s,d13C=rnorm(10,c,2),d15N=rnorm(10,n,2)))
}
}
他们应用siar包中的函数
require(plyr)
require(siar)
ell <-dlply(is1,.(Site,SizeClass),function(x) standard.ellipse(x$d13C,x$d15N,steps=1))
我想要一个包含某些字段的data.frame,所以我尝试使用带有函数的ldply
extract_SEAc <- function(e)
{
c(sapply(e, '[[', 'xSEAc'),sapply(e, '[[', 'ySEAc'))
}
ell <- ldply(ell, .(Site,SizeClass), extract_SEAc )
但是它会出错
error: trying to apply a no-function
任何想法?
答案 0 :(得分:3)
来自签名:
ldply(.data, .fun = NULL, ..., .progress = "none",
.inform = FALSE, .parallel = FALSE, .paropts = NULL)
ldply
没有像.variables
这样的dlply
参数(并且...
隐含的 因为它们作为args传递给.fun
)。
非常确定这会得到你想要的东西(而且,我相当确定有更好的方法可以做到这一点):
extract_SEAc <- function(e) {
data.frame(e$xSEAc, e$ySEAc)
}
e2 <- ldply(ell, extract_SEAc)
head(e2)
Site SizeClass e.xSEAc e.ySEAc
1 1 Big -2.462496 12.28447
2 1 Big -2.473344 12.24886
3 1 Big -2.484814 12.21326
4 1 Big -2.496901 12.17769
5 1 Big -2.509601 12.14216
6 1 Big -2.522911 12.10669