在两个列表上应用mapply函数

3
我最近提出了一个问题,关于在两个列表上使用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

What I want is:

#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]))  
1个回答

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)

也许这就是问题所在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接