R保存嵌套for循环的结果

时间:2016-10-11 21:21:29

标签: r for-loop syntax error-handling

我试图在经验数据集中编写以下循环 每个ID复制对于每个样本周期具有不同数量的观察。 任何建议将不胜感激!

a <- unique(bma$ID)
t <- unique(bma$Sample.period)

# empty list to hold the data

dens.data <- vector(mode='list', length = length(a) * length(t))
tank1 <- double(length(a))
index = 0
for (i in 1:length(a)){
  for (j in 1:length(t)){
    index = index + 1
    tank1[index] = a[index] ### building an ID column
    temp.tank <- subset(bma, bma$ID == a[i])
    time.tank <- subset(temp.tank, temp.tank$Sample.period == t[j])
    temp1 <- unique(temp.tank$Sample.period)
    temp.tank <- data.frame(temp.tank, temp1)
    dens.1 <- density(time.tank$Biomass_.adults_mgC.mm.3, na.rm = T)
    # extract the y-values from the pdf function - these need to be separated by each Replicate and Sample Period
    dens.data[[index]] <- dens.1$y
  }
}

#### extract the data and place into a dataframe

dens.new<- data.frame(dens.data)
dens.new
colnames(dens.new) <- c("Treatment","Sample Period","pdf/density for biomass")
all<- list(dens.new)
all

### create new spreadsheet with all the data from the loop

dens.new.data<- write.csv(dens.new, "New.density.csv")  ## export file to excel spreadsheet

调用dens.new&lt; - data.frame(dens.data)产生以下错误消息:

Error in data.frame(c(...)  : 
  arguments imply differing number of rows: 512, 0

循环似乎适用于dens.data[[1]]但返回NULL  dens.data[[>1]]

1 个答案:

答案 0 :(得分:0)

由于没有最小的例子,我很难猜出原始data.frame的样子。但是,对于错误消息,很明显,对于大于1的索引,您的for循环无法为列表dens.data分配值。

我的猜测是index没有按index = index + 1更新。也许您可以尝试将等号=更改为标准R赋值运算符<-,并查看整个列表是否已更新。

我听说使用等号进行分配可能会在旧版本的R中出现一些问题,但我不确定您是否面临同样的问题。无论如何,使用<-分配值总是更安全和推荐。