2017-04-22 11 views
0

が経つにつれて、私はRで次のアルゴリズムを実装しようとしています:R:反復処理が一覧

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

基本的には、リスト与えられ、アルゴリズムは、リストがない場合でも、すぐに、それは「ヌル」をヒットとして破る必要があります以上。

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) 

答えて

3

あなたは近かったが、この 建設にfor(...)を使用する必要はありません。

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

あなたは私がwhileループに1つの余分の条件を追加しました見ての通り:これはあなたがそこにある場合 リストの長さがないヌル項目を超えていないことを確認することですi <= length(top)。また、あなたがfor/while建設せずにこのコードを使用することができます

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

あなたはこのような構成とforループを使用することができますしかし

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

第2の解決策でのブレークの素晴らしい配置。素晴らしい仕事ヨハン、3つすべてを共有してくれてありがとう。 – Bhushan

1

これをチェックアウト:それはずつ実行します1つはmylのすべての値に対して1つを指定して印刷しますが、NULL値を検出すると破損します。

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

質問があれば教えてください。

+0

G.arimaありがとうございます。 – Bhushan

+0

ようこそ。 –