在矩阵中的一个单元格中调用两个值中的值

时间:2018-02-16 16:33:06

标签: arrays r list matrix igraph

有两个向量x: 1 3 5 7& y: 2 4 6 8。我使用函数outer从两个向量中的元素之间的所有可能组合构建matrix(4*4),如:

x<-c(1,3,5,7)
y<-c(2,4,6,8)
comb<-outer(x,y, paste, sep=".")
> comb
     [,1]  [,2]  [,3]  [,4] 
[1,] "1.2" "1.4" "1.6" "1.8"
[2,] "3.2" "3.4" "3.6" "3.8"
[3,] "5.2" "5.4" "5.6" "5.8"
[4,] "7.2" "7.4" "7.6" "7.8"

我现在不能索引单元格中的一个元素,例如,如果有办法只从第一个单元格element 2调用comb[1,1] 是否有像comb[[1,1]][2]=2这样的东西“我知道它不起作用”

如果以这种方式无法做到这一点,是否有另一种方法可以从组合中构造矩阵并且能够在此之后单独调用和索引每个元素?

顺便说一句:我处理顶点的图形和向量,所以如果还有其他类似函数的图形,请指导我。

由于

2 个答案:

答案 0 :(得分:1)

我认为outer可以满足您的需求。要从矩阵中获取第二个元素,请使用以下内容:

substr(comb[1,1],3,3)

请注意我选择了3,因为它是你需要的3个元素。

如果矩阵中的数字超过1位,您也可以使用strsplit

unlist(strsplit(comb[1,1], ".", fixed = T))[2]

修改

如果将矩阵更改为向量,则可能是这样的

vector_comb = c(comb)
sapply(1:length(vector_comb), function(x) unlist(strsplit(comb[x], ".", fixed = T))[2])

答案 1 :(得分:0)

这是你需要的吗?使用Vectorize

comb<-outer(x,y, Vectorize( function(a,b) c( as.list(a), as.list(b) ),SIMPLIFY = FALSE))
comb
     [,1]   [,2]   [,3]   [,4]  
[1,] List,2 List,2 List,2 List,2
[2,] List,2 List,2 List,2 List,2
[3,] List,2 List,2 List,2 List,2
[4,] List,2 List,2 List,2 List,2
comb[[1,1]][2]
[[1]]
[1] 2

comb[[1,1]][1]
[[1]]
[1] 1

更新:

unlist(strsplit(comb[1,1],'.',fixed = T))[1]
[1] "1"