将数据帧添加为列表元素(使用for循环)

Ric*_*rdo 12 for-loop r list dataframe

我在我的环境中有一系列称为EOG的数据框.从2006年到2012年,每年都有一个.例如,EOG2006,EOG2007 ...... EOG2012.我想将它们添加为列表的元素.

首先,我想知道这是否可行.我阅读了官方的R指南和一些R编程手册,但我没有找到明确的例子.

其次,我想使用for循环来做到这一点.不幸的是,我以前用来做这个工作的代码是错误的,我很疯狂地修复它.

for (j in 2006:2012){
z<-j
sEOG<-paste("EOG", z, sep="")
dEOG<-get(paste("EOG", z, sep=""))
lsEOG<-list()
lsEOG[[sEOG]]<-dEOG
}
Run Code Online (Sandbox Code Playgroud)

这将返回包含一个元素的列表.哪里出错了?

Chr*_*den 18

您继续重新初始化循环中的列表.您需要将lsEOG<-list()for循环.

lsEOG<-list()

for (j in 2006:2012){
  z <- j
  sEOG <- paste("EOG", z, sep="")
  dEOG <- get(paste("EOG", z, sep=""))
  lsEOG[[sEOG]] <-dEOG
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以j直接在paste功能中使用:

sEOG <- paste("EOG", j, sep="")
Run Code Online (Sandbox Code Playgroud)


Ric*_*ckC 12

我有同样的问题,但觉得OP的初始代码对于R初学者来说有点不透明.所以,这里可能有一个更清晰的示例,说明如何在循环中创建数据框并将它们添加到我刚才通过在R shell中玩弄时想到的列表中:

 > dfList <- list()  ## create empty list
 >
 > for ( i in 1:5 ) {
 +     x <- rnorm( 4 )
 +     y <- sin( x )
 +     dfList[[i]] <- data.frame( x, y )  ## create and add new data frame
 + }
 >
 > length( dfList )  ## 5 data frames in list
 [1] 5
 >
 > dfList[[1]]    ## print 1st data frame
            x          y
 1 -0.3782376 -0.3692832
 2 -1.3581489 -0.9774756
 3  1.2175467  0.9382535
 4 -0.7544750 -0.6849062
 >
 > dfList[[2]]    ## print 2nd data frame
            x          y
 1 -0.1211670 -0.1208707
 2 -1.5318212 -0.9992406
 3  0.8790863  0.7701564
 4  1.4014124  0.9856888
 >
 > dfList[[2]][4,2]   ## in 2nd data frame, print element in row 4 column 2
 [1] 0.9856888
 >
Run Code Online (Sandbox Code Playgroud)

对于像我这样的R初学者,请注意访问第i个数据框需要双括号.基本上,双括号用于列表,而单括号用于向量.