在 r 中全局访问局部变量

Accesiing local variables globally in r

我想访问我在函数中声明的变量并在全局 for 循环中使用它。在我的示例中,我想在 for 循环外全局访问变量 r anr1 那些在函数 val 中声明的变量和 val_all。这里只会给出最后 10 次迭代的 r 值。
任何人都可以帮助..??

g <- graph.ring(10)
V(g)$name <- LETTERS[1:10]
LETTERS[1:10]
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)
}
for (i in 1:10) 
{
  for(j in 2:10)
  {     
    r=val(g ,i,j)
    print(r[[1]]) 
    r1 = val_all(r)
    print(r1)
  }
}
print(r[[1]])

您似乎想将每次迭代的结果存储在一个列表中:

loop_results <- list()
for (i in 1:10) {
  loop_results[i] <- list(NULL)
  for(j in 2:10) {     
    r=val(g ,i,j)
    print(r[[1]]) 
    r1 = val_all(r)
    print(r1)
    loop_results[[i]][[j]] <- list(r=r, r1=r1)
  }
}
# To access the results, now we use loop_results[[i]][[j]][["r"]] for 
# each iteration i and j
print(loop_results[[1]][[2]][["r"]])

您需要添加双“<<”以存储在父环境中(在您的情况下,您看到的是 "Global")。

variable_in_function<<-"stored outside"

为什么不直接使用函数,从所有顶点开始?

r <- get.shortest.paths(g, from=V(g))

那么您将拥有 r$vpath[[1]]r$vpath[[2]]

中的所有信息

编辑:我认为这只会为您提供第一个顶点的路径。您可以尝试以下方法:

r <- vector('list', length=10)
for (i in 1:10) {
  r[[i]] <- shortest_paths(g, from=i)
}