我正在尝试在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')
我必须为使用is.null()函数添加for循环,但是下面的代码是灾难,我需要你的帮助才能解决它。
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)
答案 0 :(得分:4)
你很接近,但没有必要在此使用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)]
答案 1 :(得分:1)
检查一下:它为myls中的所有值逐个运行并打印它们但是如果它遇到NULL值则会中断。
for (val in myls) {
if (is.null(val)){
break
}
print(val)
}
如有任何疑问,请与我们联系。