我暂时问了一个关于在两个列表中使用apply
函数的问题。每个列表都是通过拆分大型数据帧创建的数据帧列表。对于每次运行函数,我想从mylist1
中的第一个元素(数据帧)和mylist2
中的第一个元素(数据帧)中的一些向量中获取向量,并将它们相互回归。然后转到下一个mylist1
元素和mylist2
元素。有效地,该函数采用具有相同数量元素的两个列表并且成对(每个列表中有一个)并与它们一起玩。
我尝试了以下内容,但我得到的结果并非我想要的结果:
a1<-c(1:5,rep(0,5))
a2<-c(1:5,10:6)
b2<-c(rep(100,5),rep(50,5))
z<-c(rep("part1",5),rep("part2",5))
df1<-data.frame(a1,z)
df2<-data.frame(a2,b2,z)
mylist1<-split(df1,z)
mylist2<-split(df2,z)
myfunction<-function(x,y)
{
meana <- mean(x$a)
meanb <- mean(y$b)
model<-lm((x$a)~(y$a))
return(c(model$coefficients[2],meana=meana,meanb=meanb))
}
result <- mapply(myfunction,x=mylist,y=mylist2)
#result
# x y
#y$a 1 -1
#meana 3 8
#meanb 100 50
我想要的是:
#y$a 1 0
#meana 3 0
#meanb 100 50
#e.g. the results in the first row are from lm((mylist1[[1]][,1])~(mylist2[[1]][,1])) and lm((mylist1[[2]][,1])~(mylist2[[2]][,1]))
答案 0 :(得分:2)
我运行了你的代码并获得了
> result <- mapply(myfunction,x=mylist1,y=mylist2)
> result
part1 part2
y$a 1 0
meana 3 0
meanb 100 50
你有一个错字
result <- mapply(myfunction,x=mylist,y=mylist2)
我改为
result <- mapply(myfunction,x=mylist1,y=mylist2)
也许这就是问题