gpt4 book ai didi

r - 使用空索引索引列表

转载 作者:行者123 更新时间:2023-12-04 08:35:22 24 4
gpt4 key购买 nike

Hadley Wickam 的 Advanced R 中多次使用空索引对数据框进行索引的技术。 ,但只是顺便解释一下。我试图找出用空索引对列表进行索引的规则。考虑以下四个陈述。

> (l <- list(a = 1, b = 2))
$a
[1] 1

$b
[1] 2

> (l[] <- list(c = 3))
$c
[1] 3

> l
$a
[1] 3

$b
[1] 3

> l[]
$a
[1] 3

$b
[1] 3

问题:
  • 为什么第二个语句的输出与第三个语句的输出不同?赋值不是应该返回被赋值的对象,在这种情况下,第二个语句应该产生与第三个相同的输出?
  • 为什么第二个语句中的赋值会导致第三个语句之后显示的输出?分配给空索引列表的规则是什么?
  • 为什么第四个语句会产生显示的输出?当列表不在赋值的左侧时,用空索引对列表进行索引的规则是什么?
  • 最佳答案

    除了之前的答案,请检查一下。请注意,行为与普通向量和列表完全相同,因此不能将其标记为“特定于列表”。

    v <- 1:3
    names(v) <- c("one", "two", "three")
    r <- 4:5
    names(r) <- c("four", "five")
    (v[] <- r)

    four five
    4 5
    Warning message:
    In v[] <- r :
    number of items to replace is not a multiple of replacement length

    v

    one two three
    4 5 4

    通过子集分配保留初始属性(此处为名称)。因此,分配右侧的名称将丢失。同样重要的是,通过子集分配遵循回收规则。在您的示例中,所有值都重新分配为 3,在我的示例中,由于长度不兼容,部分回收带有警告。

    总结,
  • <- 的分配返回评估右侧 之前 应用回收规则。
  • 这是因为 回收 ,因为两个物体的长度不同。
  • 没有赋值运算符,lvl[] 基本相同或 v[] .
  • 关于r - 使用空索引索引列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836142/

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