【发布时间】:2021-12-04 09:11:33
【问题描述】:
我每次通过一个迭代超过 4 年(2011、2013、2015、2017)的循环生成一组 6 个数据集,这样我总共将拥有 24 个数据集。我正在尝试使用分配粘贴将每个数据集的名称与相应的年份连接起来。 但是,我在循环结束时只得到 6 个数据集,而不是 6*4 =24。
我需要特殊的 [[]] 语法来创建数据框列表吗?为什么我无法将数据集分配给下面循环结构内的变量?
library(educationdata)
library(glue)
## Initialize lists
dates<-list("2011","2013","2015","2017")
frames<-list("df_ccdirectory","df_ccdenrollment","df_crdcteacher",
"df_crdcmathscience","df_crdcsat","df_crdcfinance")
dflist <- list()
for (j in dates){
df_ccdirectory <- get_education_data(level = "schools",
source = "ccd",
topic = "directory",
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[1]]<- df_ccdirectory
df_ccdenrollment <- get_education_data(level = "schools",
source = "ccd",
topic = "enrollment",
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[2]]<- df_ccdenrollment
df_crdcteacher<- get_education_data(level = "schools",
source = "crdc",
topic = "teachers-staff",
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[3]]<- df_crdcteacher
df_crdcmathscience <- get_education_data(level = "schools",
source = "crdc",
topic = "math-and-science",
subtopic = c('race','sex'),
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[4]]<- df_crdcmathscience
df_crdcsat <- get_education_data(level = "schools",
source = "crdc",
topic = "sat-act-participation",
subtopic = c('race','sex'),
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[5]] <-df_crdcsat
df_crdcfinance <- get_education_data(level = "schools",
source = "crdc",
topic = "school-finance",
filters = list(year = j,fips=10),
add_labels = TRUE)
dflist[[6]]<-df_crdcfinance
## Error catching...
#print(dates[[j]],"\n")
print(paste0("dataset 1"))
cat("\n")
head(dflist[[1]])
cat("\n")
print(paste0("dataset 6"))
cat("\n")
head(dflist[[6]])
cat("\n")
for (k in 1:6){
assign(paste(frames[k], dates[j], sep = ""), dflist[[k]])
}
}
【问题讨论】:
-
更改了代码,因此外循环迭代了多年。还是不行?指数还关闭吗?
-
是的,当您在循环的第一次迭代中写入
dflist[[1]]时,它会写入dflist的第一个元素。第二轮它只是覆盖它。也许尝试将所有dflist[[1]]、dflist[[2]]等更改为dflist[[length(dflist) + 1]]。这样,你总是写到列表的末尾