【问题标题】:Create a list of distance matrices in R在 R 中创建距离矩阵列表
【发布时间】:2015-01-26 12:49:18
【问题描述】:

使用 R 中的 Cshapes 包,我想创建一个矩阵列表,用于衡量每年两个国家是否是邻国。

install.packages("cshapes")

运行代码一年(这里是 1990 年)运行良好:

wmat <- distmatrix(as.Date("1990-1-1"), type="mindist", tolerance=0.5, useGW=FALSE)

这给出了一个具有以下结构的矩阵:

        A   B   C   D
1   A   0   0   210 0
2   B   0   0   637 305
3   C   210 637 0   73
4   D   0   305 73  0

在下一步中,我将两个国家之间距离为 0 的所有组合设置为 1,所有其他组合设置为 0,对角线再次设置为 0:

wmat[wmat>0]<-5
wmat[wmat==0]<-1
wmat[wmat==5]<-0
diag(wmat)<-0

这给了我以下矩阵:

        A   B   C   D
1   A   0   1   0   1
2   B   1   0   0   0
3   C   0   0   0   0
4   D   1   0   0   0

我努力做的是自动创建 1960 年到 2014 年间所有年份的矩阵,对每一年进行更正并将结果存储到矩阵列表中,我可以在其中按相应年份调用每个矩阵。

非常欢迎任何意见。

【问题讨论】:

    标签: r list matrix


    【解决方案1】:

    你可以试试

    lst <- lapply(1960:2014, function(x) {
               wmat <- distmatrix(as.Date(paste0(x, '-1-1')), 
                 type="mindist", tolerance=0.5, useGW=FALSE)
               wmat[wmat>0]<-5
               wmat[wmat==0]<-1
               wmat[wmat==5]<-0
               diag(wmat)<-0
               wmat 
    
        }
      )
    

    【讨论】:

    • 完美运行,非常感谢 akrun!进一步的问题:您知道是否可以使计算更快?我已经运行代码两年了,但是生成矩阵需要很多时间..
    • @jsts 很高兴知道它有效。 distmatrix 代码占用大部分时间。可能还有其他包可以进行更快的计算。但是,我不太确定。