获取R的下一个字符

时间:2017-06-01 10:29:26

标签: r list

我有一个列表,用于标识某些网络路径的变量:

development database

还有一个邻接矩阵:

> List_path<-list(c("A", "B", "C"), c("B", "C", "D"))
> List_path
[[1]]
[1] "A" "B" "C"

[[2]]
[1] "B" "C" "D"

我想通过使用路径列表和矩阵来确定网络每条路径的符号。我的想法是创建一个条件,如果给定的 i 被给定的 j 跟随(之后的确切变量),那么它们将形成一对 [i ,j] ,我可以用它从我的矩阵中获取信息。

以下是我在代码中或多或少的想法:

> MM<-matrix(c(1,1,0,0,0,-1,1,1,-1,0,0,-1,1,-1,0,0,-1,0,1,1,0,0,0,-1,1), 5, byrow=T)
> colnames(MM)<-c("A", "B", "C", "D", "E")
> row.names(MM)=colnames(MM)
> MM
   A  B  C  D  E
A  1  1  0  0  0
B -1  1  1 -1  0
C  0 -1  1 -1  0
D  0 -1  0  1  1
E  0  0  0 -1  1

在这种情况下,List_report对于每个元素已经有1个。

if(List_path[[1]][j] *follows* List_path[[1]][i]){ List_report[[1]]=List_report[[1]]*MM[i,j]} 应该是这样的:

List_report

我的问题是,在R中是否有一个函数可以在我指示的变量之后立即获取变量,或者之前的变量?

我试图找到这个并且只能在其他语言中找到 > List_report [[1]] [1] 1 # 1 (from original)* 1 (from [A,B]) * 1 (from [B,C]) [[2]] [1] -1 # 1 (original) * 1 (from[B,C]) * -1 (from[C,D]) 而在R中没有类似。如果有人可以提供帮助,我将非常感激

2 个答案:

答案 0 :(得分:1)

您可以使用此代码:

res <- lapply(List_path,
              function(v) prod(unlist(Map(f=function(x,y)MM[x,y],head(v,-1),tail(v,-1)))))

> res
[[1]]
[1] 1

[[2]]
[1] -1

答案 1 :(得分:0)

您可以创建自己的getnextchar功能。这里只是大写字母的基本字母:

getnextchar <- function( char ) {
    LETTERS[ which( LETTERS == char ) + 1L ]
}

然后,例如:

getnextchar("F")
[1] "G"

我应该解释一下LETTERS是英语中所有大写字母的内置向量对象。 letters同样是小写字母。