我尝试在一个存在的R脚本中用for
循环替换apply
循环。不过,我的旧函数返回多个dataFrames列表,如return(list(df1,df2))
。有关详细信息,请参见下面的示例:
旧脚本:
MyFunction = function(input){
df1=array(NA,c(0,1))
df2=array(NA,c(0,1))
for(i in 1:n){
...
df1 = rbind(df1,action1(input))
df2 = rbind(df2,action2(input))
}
return(list(df1,df2))
新剧本:
Object = do.call(rbind, lapply(1:n,function(i){
df1 = action1(input)
df2 = action2(input)
return(list(df1,df2))
}))
我获得:
[,1] [,2] [,3] [,4] [,5]
[1,] List,2 List,2 List,2 List,2 List,2
[2,] List,2 List,2 List,2 List,2 List,2
[3,] …
我不知道解决我的问题。任何帮助都会很感激。
谢谢你的进步,
B.Gees
答案 0 :(得分:1)
do.call(rbind, ...)
通常用于行绑定数据帧/矩阵列表。您有一个数据框列表,并且您希望相应地绑定它们,您可以尝试以下模式。
Object = do.call(Map, c(f = rbind, lapply(1:n,function(i){
df1 = action1(input)
df2 = action2(input)
return(list(df1,df2))
})))
do.call(Map, ...)
将lapply
返回的所有列表作为Map
的参数传递,然后将所有数据帧从相同的位置传递到rbind
。即所有df1
将绑定在一起,所有df2
将绑定在一起。