【问题标题】:how to select a matrix column based on column name如何根据列名选择矩阵列
【发布时间】:2014-03-27 10:43:24
【问题描述】:

我有一张最短路径的表格:

g<-barabasi.game(200)
geodesic.distr <- table(shortest.paths(g))
geodesic.distr
#   0    1    2    3    4    5    6    7 
# 117  298 3002 2478 3342 3624  800   28 

然后我构建一个 100 行和相同列数的矩阵作为长度(geodesic.distr):

geo<-matrix(0, nrow=100, ncol=length(unlist(labels(geodesic.distr))))
colnames(geo) <- unlist(labels(geodesic.distr))

现在我进行了 100 个实验,在这些实验中,我使用

创建了基于附件的优先网络
for(i in seq(1:100)){
    bar <- barabasi.game(vcount(g))
    geodesic.distr <- table(shortest.paths(bar))
    distance <- unlist(labels(geodesic.distr))
    for(ii in distance){
        geo[i,ii]<-WHAT HERE?
    }
}

对于每个实验,我想在矩阵中存储我找到了多少条路径。

我的问题是:如何根据列名选择正确的列?在我的情况下,模拟网络产生的某些名称可能不会出现在原始名称中,所以我不需要只是通过名称找到正确的列,但也是最接近的列(假设我的最大值是 7,我最终可能会得到一个长度为 9 的路径,该路径在地理矩阵中不存在,所以我想将它添加到名为 7) 的列

【问题讨论】:

  • 请提供一个可重现的例子。 stackoverflow.com/questions/5963269/…
  • 谢谢,为了复制这段代码,你只需要制作一个新的图表 g,比如:g
  • 请修改您的问题以使其完整。
  • 你的代码不起作用,seed.graph是什么?
  • 我刚刚删除了,与讨论无关……谢谢指出。

标签: r matrix igraph


【解决方案1】:

您的方法实际上存在问题。 geodesic.distr 表的长度是随机的,您分配一个矩阵来存储基于单次运行的 100 个实现。如果 100 次运行中的一次会给你一个更长的geodesic.distr 向量怎么办?我假设您想在这种情况下使分配的矩阵更大。或者,更好的是,您希望先运行 100 个实现,然后在知道其大小后分配矩阵。

另一个潜在的问题是,如果你这样做table(shortest.paths(bar)),那么你(默认情况下)考虑无向距离,最终会得到一个对称矩阵并计算所有距离(除了自距离)两次。这可能是也可能不是您想要的。

无论如何,这里有一个简单的方法,在 100 次运行后分配矩阵:

dists <- lapply(1:100, function(x) {
  bar <- barabasi.game(vcount(g))
  table(shortest.paths(bar))
})
maxlen <- max(sapply(dists, length))
geo <- t(sapply(dists, function(d) c(d, rep(0, maxlen-length(d)))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2019-04-01
    • 2014-03-22
    相关资源
    最近更新 更多