gpt4 book ai didi

r - 是否有一种合理的方式来考虑列表索引?

转载 作者:行者123 更新时间:2023-12-04 10:35:45 29 4
gpt4 key购买 nike

了解 mylist[2] 之间的区别的潜在逻辑或哲学基础是什么?和 mylist[[2]]在下面的?

什么是理解单方括号与双方括号的简单逻辑方法?

> mylist <- list(1, list("a","b","c"))

> mylist[2]
# [[1]]
# [[1]][[1]]
# [1] "a"

# [[1]][[2]]
# [1] "b"

# [[1]][[3]]
# [1] "c"

> mylist[[2]]
# [[1]]
# [1] "a"

# [[2]]
# [1] "b"

# [[3]]
# [1] "c"

最佳答案

一个简单的类比是将列表视为一列火车。火车上的每节车厢都载着东西。如果你去掉两节车厢,你的火车就少了两节车厢。如果你把除了一辆车之外的所有东西都去掉,它仍然是一辆只有一辆车的火车。

  • 可以通过[] 来减小火车的大小或重新组织车厢的顺序。 (子集)功能。
  • 要检查特定汽车的内容,您必须打开车门,这是通过 [[]] 实现的。 (尽管 $ 也可以与命名列表一起使用)。我将其称为提取功能,尽管我不确定这是否是一个广泛使用的术语。

  • 在您的示例中, mylist[2] 是包含一个元素的 mylist 的子列表。您可以通过 length(mylist[2]) 进行验证。 .如果参数有效, [函数将提供一个列表,其中的元素与作为参数提供给 [ 的数字或字符向量中的元素一样多。 .大多数情况下,我们对检查列表项的内容感兴趣。这是通过 [[ 实现的。功能。例如, mylist[[2]]mylist[2] 的内容,它本身就是一个包含多个元素的列表。要查看此内容,请尝试 length(mylist[[2]])
    因为 [可以认为是列表子集函数和 [[作为列表元素提取函数, mylist[1:2]mylist[c(1,2)]返回一个子列表(在这种情况下相当于 mylist),而 mylist[[1:2]]mylist[[c(1,2)]]返回“下标越界”错误。一次只能提取一个列表元素(即,每个函数调用)。

    @richard-scriven 提醒我注意 Hadley Wickham twitter post 上的链接以照片的形式提供嵌套列表的附加类比。

    使用相当简单的列表结构, str是了解列表内容的好方法。在本例中, str(mylist[2]) 的输出和 str(mylist[[2]])提供对其不同数据结构的更多见解。

    通常,列表对其内容是不可知的,因此单个列表可能包含其他列表、data.frames、矩阵和原子向量作为单独的元素。正如@joran 在他的评论中开玩笑说的那样,这就是火车类比被拉伸(stretch)的地方,也许有点过分了。但是,一旦您对列表的第一级感到满意,其他嵌套列表的行为方式相同。 (也许嵌套列表是火车车厢内携带的盒子?)

    边注: str 是我最喜欢的用于检查列表和 data.frames(具有共同长度的原子向量的列表)的函数之一。功能。我经常在阅读 .csv、.dta 或其他文件后使用它来检查列表结构。用户在调试代码时学习 R(以及有经验的用户)的一个常见障碍是记住他们正在使用什么数据结构,以及需要什么数据结构作为参数或什么数据结构是函数的输出。 str连同 typeofclass ,是解决此问题的出色工具套件。

    这个答案得益于来自 @42、@nicola、@joran、@jogo 和 @richard-scriven 的评论。

    关于r - 是否有一种合理的方式来考虑列表索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777567/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com