R 的 list() 函数实际上创建了一个嵌套列表吗?

stu*_*ash 4 r list

R 可能有自己的 loigc 但list()没有给我我所期望的。

l1 <- list(1,2)
$> l1
[[1]]
[1] 1

[[2]]
[1] 2
Run Code Online (Sandbox Code Playgroud)

要检索元素,我需要使用双括号,即

$> l1[[1]]
[1] 1
$> class(l1[[1]])
"numeric"
Run Code Online (Sandbox Code Playgroud)

单括号给了我一个子列表(这也是一个列表对象):

$> l1[1]
l1[[1]]
[1] 1
$> class(l1[1])
"list"
Run Code Online (Sandbox Code Playgroud)

我并不是说这是错误的;我并不是说这是错误的。这不是我所期望的,因为我试图创建一个一维列表,而我实际得到的是一个嵌套列表,一个二维对象。

这种行为背后的逻辑是什么?我们如何创建 OO 类型列表?即一维数据结构?

我期望的一维数据结构的行为是:

$> l1[1]
[1] 1
$> l1[2]
[2] 2
Run Code Online (Sandbox Code Playgroud)

JBG*_*ber 5

如果您想创建一个在一个元素中包含两个数字的列表,您需要查找以下内容:

l1 <- list(c(1, 2))
l1
#> [[1]]
#> [1] 1 2
Run Code Online (Sandbox Code Playgroud)

您的代码基本上将两个长度为 1 的向量放入一个列表中。为了让 R 理解你有一个向量,你需要c()首先将这些值组合(即)到一个向量中。

当我们首先将两个向量创建为对象时,这可能会变得更清楚:

v1 <- 1
v2 <- 2
l2 <- list(v1, v2)
l2
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2
Run Code Online (Sandbox Code Playgroud)

如果您只想将两个值存储在一个对象中,则需要一个向量:

l1 <- c(1, 2)
l1
#> [1] 1 2
Run Code Online (Sandbox Code Playgroud)

有关 RI 中不同数据结构的更多信息,请推荐本章:http://adv-r.had.co.nz/Data-structures.html

[对于关于和索引的问题[[,请看看这个经典答案:/sf/answers/81864681/