【问题标题】:get.inducedSubgraph isolated altersget.inducedSubgraph 隔离改变
【发布时间】:2015-09-02 18:49:50
【问题描述】:

我有一个包含 3,000 个网络的列表。对于它们中的每一个,我需要计算其属性“att”==1 的变更之间的密度。我尝试了几个选项,这是我的最终代码(我只是在试验 3 个网络)。主要问题是某些网络不包含任何“att”==1 的更改。由于 get.inducedSubgraph 不适用于这些情况,我正试图消除它们。但是,我仍然收到一条错误消息。尝试不同的选项在我看来,当我在网络中只有两个更改并且彼此没有链接(密度 = 0)时,会出现该消息。那可能吗?否则,我犯了什么错误?

m1 <- matrix(rbinom(25,1,.4),5,5)
diag(m1) <- 0
g1 <- network(m1)
set.vertex.attribute(g1,"att",as.character(rep(0:1,dim(m1)[1])))

m2 <- matrix(rbinom(36,1,.4),6,6)
diag(m2) <- 0
g2 <- network(m2)
set.vertex.attribute(g2,"att",as.character(rep(0:1,dim(m2)[1])))

m3 <- matrix(rbinom(36,1,.4),6,6)
diag(m3) <- 0
g3 <- network(m3)
set.vertex.attribute(g3,"att",as.character(rep(0,dim(m2)[1]))) 

net.list=list(g1,g2,g3)

size=vector()
for(i in 1:length(net.list))
size[[i]]=sum(get.vertex.attribute(net.list[[i]], "att")=="1")
size
[1] 2 3 0

density=vector()
for(i in 1:length(net.list))
density[[i]]=ifelse(size[[i]]>1, gden(get.inducedSubgraph(net.list[[i]],v=which(net.list[[i]]%v%"att"=="1"))), NA)

Error in `[<-`(`*tmp*`, nal, 3, value = NA) : subscript out of bounds

【问题讨论】:

    标签: r statnet


    【解决方案1】:

    看起来问题在于您将sizedensity 变量创建为向量,然后尝试使用列表表示法[[]] 而不是向量表示法[] 对它们进行索引

    如下更改您的代码对我有用:

    size=vector()
    for(i in 1:length(net.list))
    size[i]=sum(get.vertex.attribute(net.list[[i]], "att")=="1")
    size
    [1] 2 3 0
    
    density=vector()
    for(i in 1:length(net.list))
    density[i]=ifelse(size[i]>1, gden(get.inducedSubgraph(net.list[[i]],v=which(net.list[[i]]%v%"att"=="1"))), NA)
    

    仅供参考,如果您要为数千个网络执行此操作,使用lapplysapply 语法而不是for 循环可能更有效。即

    size<-sapply(seq_along(net.list),function(i){
      sum(get.vertex.attribute(net.list[[i]], "att")=="1")}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 2021-12-14
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多