【发布时间】:2021-11-20 13:54:02
【问题描述】:
我必须自动化这一系列功能:
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”。索引值位于 WBES_sf_angola 和 FDI_angola 数据集的 isic 列中。
如何将索引嵌入到各种项目的名称中?
编辑:
我尝试了以下修改:
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)
}
输出只是一个包含dist_ao_62 的列表。我应该在哪里避免覆盖?
【问题讨论】:
-
你可以将 dist_ao_ 元素放在一个命名列表中(即
result_list <- list(); result_list[[paste0("dist_ao_", i)]] <- distm(WBES_angola_i,FDI_angola_i, fun = distGeo)/1000或者(不是真的推荐)你可以使用assign -
好的。其余项目是否以正确的方式编入索引?我的意思是,如果对于 i 的每个值我想要不同的
WBES_sf_angola_i、WBES_angola_i和FDI_angola_i,我应该这样索引它们吗? -
在您当前的代码中,变量
WBES_sf_angola_i将在循环的每次迭代中被覆盖(即只有一个名为WBES_sf_angola_i的变量,其最后一个字母“i”永远不会替换为迭代器的当前值i!)如果要动态创建名称,则必须沿paste()路径使用某些东西.... -
查看已编辑的问题。我应该为循环的每个元素使用
paste()吗? -
在您编辑的问题中,您会在每次迭代时覆盖
result_list。你应该把它移出循环;)