2017-11-28 3 views
1

混乱しているタイトルのため申し訳ありませんが、問題をより明確にするためにどのようにフレーズするかわかりません。n番目のサブサブリストを含むサブリストの名前はどのように取得できますか?

のは、私は次のリストを持っていると仮定しましょう:私は必要なもの

a <- list(list(c("a","b")),list(c("c","d"))) 
b <- list(list(c("e","f"))) 
c <- list(list(c("a","b")),list(c("e","f"))) 

# a,b and c are saved inside named lists: 
d <- list(a,b,c) 
e <- list(b,c,a,a) 
names(d) <- c("List X","List Number Y","List Number Z") 
names(e) <- c("List Number W","List X","List Number Y","List Number Z") 

はそれが(DとEなど)のリストと整数を与えられ、nは、それがサブリストの名前を返す、関数fでありますn番目のサブリストを含むあなたは私の例を見ればそれが明確になる:第3のサブサブリストは、その内部に含まれる原因となるので、function(d,3)は「リスト番号Y」を返します

> d 
$`List X` 
$`List X`[[1]] 
$`List X`[[1]][[1]] 
[1] "a" "b" 


$`List X`[[2]] 
$`List X`[[2]][[1]] 
[1] "c" "d" 



$`List Number Y` 
$`List Number Y`[[1]] 
$`List Number Y`[[1]][[1]] 
[1] "e" "f" 



$`List Number Z` 
$`List Number Z`[[1]] 
$`List Number Z`[[1]][[1]] 
[1] "a" "b" 


$`List Number Z`[[2]] 
$`List Number Z`[[2]][[1]] 
[1] "e" "f" 

はのは、「d」はどのように見えるか見てみましょう一覧

function(d,1)function(d,2)は戻ってくる "リスト番号X" と

function(d,4)function(d,5) "リスト番号Z"

を返します

これを解決する上品な方法はありますか?

答えて

0
foo = function(mylist, n){ 
    names(mylist)[which(cumsum(lengths(mylist)) >= n)[1]] 
} 

sapply(1:5, function(i) foo(d, i)) 
#[1] "List X"  "List X"  "List Number Y" "List Number Z" "List Number Z" 

foo(d, n = 7) 
#[1] NA 
関連する問題