3

私は R がリストを動的に作成する方法に悩まされており、誰かが何が起こっているのか、コードを修正するために何をすべきかを理解するのを手伝ってくれることを願っています. 私の問題は、長さ 1 のベクトルの割り当てには名前付きベクトルが割り当てられますが、長さ 1 より大きいベクトルの割り当てにはリストが割り当てられることです。私の望む結果は、割り当てているベクトルの長さに関係なく、リストが割り当てられることです。どうすればそのような結果を達成できますか?

例えば、

types <- c("a", "b")
lst <- vector("list", length(types))
names(lst) <- types
str(lst)
List of 2
 $ a: NULL
 $ b: NULL
lst$a[["foo"]] <- "hi"
lst$b[["foo"]] <- c("hi", "SO")
str(lst)
List of 2
 $ a: Named chr "hi"
  ..- attr(*, "names")= chr "foo"
 $ b:List of 1
  ..$ foo: chr [1:2] "hi" "SO"
str(lst$a)
 Named chr "hi"
 - attr(*, "names")= chr "foo"
str(lst$b)
List of 1
 $ foo: chr [1:2] "hi" "SO"

結果として欲しいのは、このようなデータ構造です。

List of 2
 $ a:List of 1
  ..$ foo: chr [1] "hi"
 $ b:List of 1
  ..$ foo: chr [1:2] "hi" "SO"
4

2 に答える 2

3
于 2012-11-03T16:22:32.477 に答える
2

必要なタイプを作成して割り当てるだけでよいと思います。

R> qq <- list( a=list(foo="Hi"),  b=list(foo=c("Hi", "SO")))
R> qq
$a
$a$foo
[1] "Hi"


$b
$b$foo
[1] "Hi" "SO"


R> 

すべての要件が満たされている場合:

R> class(qq)
[1] "list"
R> names(qq)
[1] "a" "b"
R> sapply(qq, names)
    a     b 
"foo" "foo" 
R> 
于 2012-11-03T15:42:43.193 に答える