gpt4 book ai didi

r - R保存来自嵌套的for循环的结果

转载 作者:行者123 更新时间:2023-12-03 08:51:23 24 4
gpt4 key购买 nike

我正在尝试在一个经验数据集上编写以下循环,其中
每个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 <-data.frame(dens.data)会产生以下错误消息:
Error in data.frame(c(...)  : 
arguments imply differing number of rows: 512, 0

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

最佳答案

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

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

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

关于r - R保存来自嵌套的for循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com