我被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"
+1好主意。 'lst < - replicate(length(types),list())'会更干净。 –
或者只是在'list' – hadley
@hadley包装作业的右侧,这是我的初步猜测,但它不是做同样的事情:它是'lst $ a',需要是一个列表,而不是'lst美元[ “富”]]'。 – flodel