下面的代碼是我的R腳本。我想從我的r腳本的結果列表中獲取$ r [[1]]和$ r1:loop_results
。以下是loop_results
的第一個元素的外觀樣例。我希望有一個列表只顯示的最短路徑像1和1 2的順序和名單隻包含像A和A B.頂點序列從r中的整套列表中提取元素
[[1]]
[[1]][[1]]
[[1]][[1]]$r
[[1]][[1]]$r[[1]]
[1] 1
[[1]][[1]]$r1
Vertex sequence:
[1] "A"
[[1]][[2]]
[[1]][[2]]$r
[[1]][[2]]$r[[1]]
[1] 1 2
[[1]][[2]]$r1
Vertex sequence:
[1] "A" "B"
這裏是我的[R腳本
library(igraph)
g <- graph.ring(5) # the graph
V(g)$name <- LETTERS[1:5] # Vertex names
# Define functions:
val=function(g,i,j) { r=get.shortest.paths(g, i,j ,mode = "out"); return(r) }
val_all=function(r) { r1 <- V(g)[r$vpath[[1]]]; return(r1) }
loop_results <- list()
for (i in 1:5) {
loop_results[i] <- list(NULL)
for(j in 1:5) {
r=val(g ,i, j)
print(r[[1]])
r1 = val_all(r)
print(r1)
loop_results[[i]][[j]] <- list(r=r[[1]], r1=r1)
}
}
loop_results
我從dput(loop_results)
獲得以下輸出:
list(list(structure(list(r = list(1), r1 = structure(1,
class ="igraph.vs", env = <environment>)), .Names = c("r",
"r1")), structure(list(r = list(c(1, 2)),
r1 = structure(c(1, 2),
class = "igraph.vs", env = <environment>)), .Names = c("r", "r1")),
structure(list(r = list(c(1, 2, 3)), r1 = structure(c(1, 2, 3),
class = "igraph.vs", env = <environment>)), .Names = c("r", "r1")),
structure(list(r = list(c(1, 5, 4)), r1 = structure(c(1, 5, 4) class = "igraph.vs",env = <environment>)),
.Names = c("r", "r1")), structure(list(r = list(c(1, 5)), r1 = structure(c(1, 5),class = "igraph.vs", env = <environment>)), .Names = c("r", "r1")))
以這種形式爲其餘4個字母中的每一個也。 get.shortest.path函數中的R只會將最短路徑序列作爲數字返回。如果我們有帶有字符串的頂點,那麼我們用我的r腳本中的val_all函數打印出最短路徑結果的頂點序列名稱。
我的主要目標是找到包含具有中間節點的最短路徑序列的列表。就像在我的例子中,我想找到節點「A」和「C」之間的最短路徑,結果就是AB C.然後,我只想打印「B」而不是「A」和「C」的中間節點「,這是我找到最短路徑的節點。爲此,我正在考慮在r中使用setdiff()函數,而對於這個函數,我需要傳遞一個列表,這就是爲什麼我需要前面提到的列表。
我檢查了我的腳本它正在生產outpu噸。我希望通過在顯示R腳本之前提取上面$ r [[1]]的結果列表元素來獲得結果。在我顯示的r腳本之前的列表是半列表。我只想從輸出列表中得到$ r [[1]]的結果。 –
嗨坦率的說,我從我顯示的半列表我希望的輸出是[1] 1,[1] 1 2就像這個序列。我只想從那個列表中取出那些在我的半列表中命名爲[[1]] [[1]] $ r1然後[[1]] [[2]] $ r1這部分我只想獲取的部分從列表中。 –
對此感到抱歉。 –