我有一个列表,用于标识某些网络路径的变量:
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中没有类似。如果有人可以提供帮助,我将非常感激
答案 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
同样是小写字母。