2016-04-06 8 views
1

私は間違った質問をしているかもしれませんが、意図したことをする別の方法はないかもしれませんが、リスト専用のパッケージを見たのですが、サブリストの数が多く、サブリスト内にハイエンドに埋め込まれているリストにある場合、サブリストの数が多い場合は、これは実用的ではありません。リストの最下位サブリストレベルへのアクセス

サブリスト内のすべての整数(0)要素をキャッチして変更し、それらをNULLまたは0に変更するために、サブリストにアクセスすることを目指します。他の回答からは、空のlがない場合に整数(0)の要素があるかどうかを評価するしかし、主な問題は、ブラケット索引付けとは別の方法で最下位レベルにアクセスすることにあります。 (unlistは、整数(0)の場合を除いて項目を終了する場合にのみ機能します)。長さ(x [[i]])の長さより1つ上の長さのブラケットと長さによる完全な割り出しのために働きます。

x <- list(list(list(c(1,2)),list(c(3,4))),list(list((integer(0)),c(7,8)))) 

str(x) 

List of 2 
$ :List of 2 
..$ :List of 1 
.. ..$ : num [1:2] 1 2 
..$ :List of 1 
.. ..$ : num [1:2] 3 4 
$ :List of 1 
..$ :List of 2 
.. ..$ : int(0) 
.. ..$ : num [1:2] 7 8 

x[[1]][[1]][[1]] # the first element in sublist 1 
# 1 2 
x[[2]][[1]][[1]] # the first element in sublist 2 
# integer(0) 
length (x[[2]][[1]][[1]]) 
[1] 0 
lengths(x[[2]][[1]]) # will work by going one way down the sublist as to check for length. 

EDIT:

Xはコメントや回答から提案された解決策は、要素と抽出整数(0)の長さを測定するのに十分な深グーないであろう状況上記よりさらにdownlevesを持っている場合、それ動作しないでしょう。どのようにあなたはそれについて行くだろうか?

x <- list(list(list(list(list(c(1,2)),list(c(3,4))),list(list((integer(0)),c(7,8)))))) 

str(x) 
List of 1 
$ :List of 1 
..$ :List of 2 
.. ..$ :List of 2 
.. .. ..$ :List of 1 
.. .. .. ..$ : num [1:2] 1 2 
.. .. ..$ :List of 1 
.. .. .. ..$ : num [1:2] 3 4 
.. ..$ :List of 1 
.. .. ..$ :List of 2 
.. .. .. ..$ : int(0) 
.. .. .. ..$ : num [1:2] 7 8 
+0

あなたは '再帰= F'と' lapply'と 'unlist'を使用して考えていましたか?あなたが求めていることはまだ明確ではありません。 'map(lengths、x)'、 'lapply(x、function(y)Map(lengths、y))' ... – Philip

+0

あなたは何をしようとしていますか? '?rapply'を念頭に置いていますか?例えば。 –

+0

@Philip、Unlistは機能しません。最初の関数philipが示唆しているのは、上記の3つのレベルの上にあることです(str(rapply(x、function(x)、0L else x、how = "replace"要素が存在するサブリストは、実際のデータに存在する要素(SEE EDIT)の上の2つのレベルです。 – Barnaby

答えて

2

私はrapply()lapply()の再帰バージョンは、あなたのケースでうまくいくと思います。

はこれを試してみてください:

y <- rapply(x, f = function(x)if(length(x)==0) 0 else x, how = "list") 
str(y) 

List of 2 
$ :List of 2 
    ..$ :List of 1 
    .. ..$ : num [1:2] 1 2 
    ..$ :List of 1 
    .. ..$ : num [1:2] 3 4 
$ :List of 1 
    ..$ :List of 2 
    .. ..$ : num 0 
    .. ..$ : num [1:2] 7 8 
+0

長さの使用を超えて製剤ごとにどのように深いレベルに入るのかについての手がかりEDIT – Barnaby

+0

ごめんなさい、あなたの質問は分かりません。私の答えはあなたの編集された質問でも機能します。 – Andrie

関連する問題