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)
如果您想创建一个在一个元素中包含两个数字的列表,您需要查找以下内容:
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/