R应用返回列表的循环
问题描述:
我试图在existant R脚本中用apply
循环替换for
循环。尽管如此,我的旧函数返回多个数据框列表,如return(list(df1,df2))
。对于一些细节,通过实例介绍如下:R应用返回列表的循环
旧脚本:
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
答
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
将被绑定在一起。
+0
我测试并运行。非常感谢Psidom。 –
什么是* action1()*和* action2()*?这些不是第一个函数中的数据框,而是数组,两个非常不同的数据结构。 – Parfait
对不起,我的例子没有表现力。我在输入dataFrame和'action1'和'action2'中使用了'...'来对我转换的dataFrame进行两种不同的计算。我同意你关于'array'和dataFrame的区别,但是对于我来说,初始化dataFrame并通过第一个结果dataFrame的简单串联获得好的列标题是一个简单的解决方案。 –