将for循环的结果存储在对象或矩阵中

时间:2013-04-10 14:35:22

标签: r for-loop

我遇到了以下问题:

我在R中使用for-loop从矩阵中获取特定数据。 我的代码如下。

for(i in 1:100){
   T <- as.Date(as.mondate (STARTLISTING)+i)
   DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]

   write.table(DELIST, file = paste("tab", i, ".csv"), sep="," )
   print(DELIST)
}

使用print,R传递数据。 使用write.table,R将数据传递到不同的文件中。

我的目标是在一个矩阵中汇总for循环的结果。 ('i'的每一行)

但不幸的是我做不到。


抱歉,我是R中真正的菜鸟。

for(i in 1:100)
{
T <- as.Date(as.mondate (STARTLISTING)+i)
DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]
assign(paste('b',i,sep=''),DELIST)

}

这会传递100个对象,其中包含我的结果。 但我需要的是一个 矩阵/数据框,包含100列或一个列表。

有什么想法吗?


喂!

因此,我不允许编辑我自己的答案,这里是我的(简单)解决方案,如下所示:

DELIST <- vector("list",100)
for(i in 1:100)

{
T <- as.Date(as.mondate (STARTLISTING)+i)
DELIST[[i]] <- as.character((subset(datensatz_Start_End.frame, TIME <= T))[,1])
}

DELIST[[99]]  ## it is possible to requist the relevant companies for every 'i'

向大家致谢!

乔治

2 个答案:

答案 0 :(得分:2)

如果您需要列表,可以使用lapply代替循环

LL <- lapply(1:100, 
       function(i) {
         T <- as.Date(as.mondate (STARTLISTING)+i)
         DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]
         assign(paste('b',i,sep=''),DELIST) 
         }
       )

之后,您可以使用rbind

一起do.call结果
result <- do.call(rbind, LL)

或者,如果您确信LL的所有元素的列将相同,那么您可以使用包rbindlist

中更高效的data.table
result <- rbindlist(LL)

答案 1 :(得分:0)

查看rbind功能。您可以从空DELIST.DF开始,并在循环中将每一行追加到它 -

DELIST.DF <- NULL
for(i in 1:100){
   T <- as.Date(as.mondate (STARTLISTING)+i)
   DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]

   DELIST.DF <- rbind(DELIST.DF, DELIST)

   write.table(DELIST, file = paste("tab", i, ".csv"), sep="," )
   print(DELIST)
}