R:遍历列表

R: Iterating Over the List

我正在尝试在 R 中实现以下算法:

Iterate(Cell: top)
    While (top != null)
        Print top.Value
        top = top.Next
    End While
End Iterate

基本上,给定一个列表,即使列表尚未结束,算法也应该在到达 'null' 时立即中断。

myls<-list('africa','america south','asia','antarctica','australasia',NULL,'europe','america north')

我不得不添加一个 for 循环来使用 is.null() 函数,但下面的代码是灾难,我需要你的帮助来修复它。

Cell <- function(top) {
  #This algorithm examines every cell in the linked list, so if the list contains N cells,
  #it has run time O(N).
  for (i in 1:length(top)){
    while(is.null(top[[i]]) !=TRUE){
      print(top)
      top = next(top)
    }
  }
}

您可以运行此函数使用:

Cell(myls)

你很接近,但没有必要在这里使用 for(...) 施工。

Cell <- function(top){
    i = 1
    while(i <= length(top) && !is.null(top[[i]])){
        print(top[[i]])
        i = i + 1
    }
}

如您所见,我在 while 循环中添加了一个额外条件:i <= length(top) 这是为了确保您不会超出 列出以防没有空项。

但是你可以使用一个 for 循环与这个结构:

Cell <- function(top){
    for(i in 1:length(top)){
        if(is.null(top[[i]])) break
        print(top[[i]])
    }
}

或者,您可以在没有 for/while 结构的情况下使用此代码:

myls[1:(which(sapply(myls, is.null))[1]-1)]

检查一下:它对 myls 中的所有值一一运行并打印它们,但如果遇到 NULL 值,它就会中断。

for (val in myls) {
  if (is.null(val)){
   break
  }
  print(val)
}  

如有任何疑问,请告诉我。