如何使用具有不同长度的列表?

缺口

这个问题从这里开始

我有一个无向图gn<100顶点。该图很简单。所有顶点的坐标都是整数(x_i, y_i), i=1, 2,..., n,边缘的集合是预定义的,它们是长度1单位为线段顶点的程度可以234

library(igraph)

g <- graph_from_literal(1-2-3-4-5-6-7-8-1, 8-9-4)
B <- t(matrix(c(0,0, 0,1, 0,2, -1,2, -2,2, -2,1, -2,0, -1,0, -1,1), nrow =2));

V(g)$id <- seq_len(vcount(g))

V(g)$x <- B[,1]; V(g)$y <- B[,2]

plot(g, layout=as.matrix(B))

在此处输入图片说明

我需要为顶点设置新corner属性。

如果顶点的度为且两个入射边不在同一条线上,则称该顶点icorner顶点2在上面的顶点上的图1, 3, 5, 7是角顶点,而其余顶点2, 4, 6, 8, 9是非角。

我已经找到了度等于的顶点列表2

idv <- V(g)[strength(g)==2]; idv # 1 2 3 5 6 7 9

然后i找到第-个顶点的邻域顶点列表,并创建新的属性:

neigh<-neighborhood(g, nodes=idv); neigh
V(g)$corner <- 0

我的尝试

for(i in idv){
    ifelse(V(g)[neigh[[i]][2]]$x == V(g)[neigh[[i]][3]]$x || 
           V(g)[neigh[[i]][2]]$y == V(g)[neigh[[i]][3]]$y, 
    V(g)[neigh[[i]][1]]$corner <- 0, 
    V(g)[neigh[[i]][1]]$corner <- 1)}

但是我有错误 Error in neigh[[i]] : subscript out of bounds

通常情况下,的长度neigh小于或等于长度V(g)$id

length(neigh)     # 7
length(V(g)$id)   # 9

而且我无法比较协调员(x_i, y_i)

题。如何使用具有不同长度的列表?

朱利叶斯·维诺拉(Julius Vainora)

在这种特定情况下,一种解决方案将是涉及iidv用的元件neigh例如,neigh[[i]][2]可以改写为neigh[i == idv][[1]][2]]和我们共

for(i in idv){
  ifelse(V(g)[neigh[i == idv][[1]][2]]$x == V(g)[neigh[i == idv][[1]][3]]$x || 
           V(g)[neigh[[i]][2]]$y == V(g)[neigh[i == idv][[1]][3]]$y, 
         V(g)[neigh[i == idv][[1]][1]]$corner <- 0, 
         V(g)[neigh[i == idv][[1]][1]]$corner <- 1)}

但是,这非常复杂且难以理解。取而代之的是,我们可以利用以下事实:每个idv邻居都有相同数量的邻居,并且neigh可以将其转换为矩阵:

neigh <- do.call(rbind, neigh)

然后我们有

V(g)$corner[neigh[, 1]] <- V(g)[neigh[, 2]]$x != V(g)[neigh[, 3]]$x &
  V(g)[neigh[, 2]]$y != V(g)[neigh[, 3]]$y

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用具有不同长度的逗号分隔字符串的Pandas str.split

如何使用具有匹配变量的两个不同长度的不同数据帧减去一个值

具有不同长度的列表列表的元素级联

如何从具有不同长度列表的字典中创建词典列表

如何从具有不同长度的列表列表中创建Pandas DataFrame?

修复代码以摆脱ValueError:无法使用具有不同长度的多索引选择索引器进行设置

切片具有不同长度的子列表

从列表中生成具有不同长度的数据框

如何将具有不同长度值的列表转换为字典?

如何通过具有特定订单的不同长度列表获得许多总和?

如何比较两个具有不同长度的列表并删除一些元素?

如何将具有不同长度元素的列表转换为数据框

如何将具有不同长度向量的大列表转换为数据帧?

使用dplyr重新组织列表中具有不同长度元素的数据框

如何遍历具有不同长度的多维数组-PHP

如何合并到具有不同长度的sql列?

如何使用itertools对python中具有不同长度的可迭代对象进行迭代?

如何使用T-SQL合并多个具有不同长度的父子关系?

如何使用具有不同输出长度的Printf在列中创建输出-Java

如何压缩不同长度的列表?

Python:在python上打印时,如何将具有不同长度的列表写入格式正确的.txt文件。

如何读取一个包含多个具有不同长度的注释数据帧的.csv文件作为列表?

如何在Python中将具有不同长度的多个值的嵌套列表转换为pandas数据框?

使用Python中的Pandas模块将网站的提取项写入具有不同长度列表的.xls表中

具有相同长度的两个输入列表与具有不同长度的两个输入列表的行为不同(方案)

用Java排序具有不同长度的一维列表的二维数组列表

将具有不同长度的列表列表转换为numpy数组

从具有不同长度的列表列表中按升序打印整数

将列表中的所有值更改为具有奇异值、不同长度的值