【发布时间】:2018-02-15 14:35:40
【问题描述】:
我需要多次执行这段代码才能在最后得到 45 个不同的矩阵:mat[j], j=1:45。
不知道如何使用“for-loop”来实现这一点,将不胜感激任何提示。
数据文件存放在这里,逐年https://intl-atlas-downloads.s3.amazonaws.com/index.html
library(readstata13)
library(diverse)
library(plyr)
for (j in 1:45) {
dat <- read.dta13(file.choose())
data = aggregate(dat$export_value, by = list(dat$exporter,dat$commoditycode), FUN = sum)
colnames(data) = c("land","product","value")
dt = split(data, f = data$product)
land = as.data.frame(sort(unique(data[, 1])))
nds = seq(1, nrow(land), by = 1)
texmat = cbind(nds, land)
colnames(texmat) = c("num", "land")
for (i in 1:length(unique(data[, 2]))) {
(join(texmat, dt[[i]], by = "land", type = "left")$value)
}
mt = sapply(1:length(unique(data[, 2])), function(i) join(texmat, dt[[i]], by = "land", type = "left")$value)
colnames(mt) = unique(data[, 2])
rownames(mt) = sort(unique(data[, 1]))
mt[is.na(mt)] = 0
rcamat=values(mt, category_row = FALSE, norm = "rca",filter = 1, binary = TRUE)
rcamat[is.na(rcamat)] = 0
tmat = rcamat[rowSums(rcamat) != 0, , drop = TRUE]
mat = t(tmat)
}
【问题讨论】:
-
我建议您使用特定于语言的标签对其进行标记以获得更具体的帮助 -
for-loop非常通用。 -
您还应该在 R 中使用缩进,并使用通用符号在块开始的行中设置圆括号;因此使用 "for (i in 1:2){" 这样大家就可以更好地阅读代码了。