首页 > 解决方案 > 如何使用具有多个结果的 for 循环

问题描述

我必须自动化这一系列功能:

for (i in c(15,17,20,24,25,26,27,28,29,45,50,52,55,60,62)) {

WBES_sf_angola_i <- subset(WBES_sf_angola, isic == i)
WBES_angola_i <- as_Spatial(WBES_sf_angola_i)             

FDI_angola_i <- FDI_angola[FDI_angola$isic==i,]           

dist_ao_i <- distm(WBES_angola_i,FDI_angola_i, fun = distGeo)/1000    

rm(WBES_sf_angola_i,WBES_angola_i,FDI_angola_i)
}

因此,我希望每个 i 都有一个“dist_ao”。索引值可以在和数据集的 isic列中找到。 WBES_sf_angola FDI_angola

如何将索引嵌入到各种项目的名称中?

编辑:

我尝试了以下修改:

for (i in c(15,17,20,24,25,26,27,28,29,45,50,52,55,60,62)) {

WBES_sf_angola_i <- subset(WBES_sf_angola, isic == i)
WBES_angola_i <- as_Spatial(WBES_sf_angola_i)             

FDI_angola_i <- FDI_angola[FDI_angola$isic==i,]           

result_list <- list()
  
result_list[[paste0("dist_ao_", i)]] <-  distm(WBES_angola_i,FDI_angola_i, fun = distGeo)/1000  

rm(WBES_sf_angola_i,WBES_angola_i,FDI_angola_i)
}

并且输出只是一个包含 1 的列表dist_ao_62。我在哪里避免覆盖?

标签: rloopsfor-loopindexing

解决方案


你可以这样接近它。所有结果dataframes都将包含在 中list,您可以dataframe在此处从代码的最后一行将其转换为 a。注意:由于不可重现,我主要从循环内的问题中获取代码。

WBES_sf_angola_result <- list() # renamed this, as it seems you are using a dataset with the name WBES_sf_angola
WBES_angola <- list()
FDI_angola <- list()
dist_ao <- list()


for (i in c(15,17,20,24,25,26,27,28,29,45,50,52,55,60,62)) {
  
  WBES_sf_angola[[paste0("i_", i)]] <- subset(WBES_sf_angola, isic == i)
  WBES_angola[[paste0("i_", i)] <- as_Spatial(WBES_sf_angola_i)             
  
  FDI_angola[[paste0("i_", i)] <- FDI_angola[FDI_angola$isic==i,]           
  
  dist_ao[[paste0("i_", i)] <- distm(WBES_angola_i,FDI_angola_i, fun = distGeo)/1000    
  
  rm(WBES_sf_angola_i,WBES_angola_i,FDI_angola_i)
}

WBES_sf_angola_result <- do.call(rbind, WBES_sf_angola_result) # to get a dataframe

您的子集数据也可以通过列表索引访问。例如。

WBES_sf_angola_result[[i_15]] # for the first item. 

推荐阅读