R将属性复制到另一个对象

R copying attributes over to anther object

我有一个初始变量:

a = c(1,2,3)
attr(a,'name') <- 'numbers'

现在我想创建一个新变量,它是 a 的子集,然后让它具有与 a 相同的属性。是否有类似 copy.over.attr 的函数或类似的东西可以做到这一点,而我不必进入内部并确定哪个是用户定义的属性等。当我将多个属性附加到单个变量时,这会变得复杂。

简单的 attributes(b) <- attributes(a) 行不行?
这将在从 a 中的数据子集创建 b 后执行,因此它不是真正的单个语句,但应该有效。

应谨慎使用。有mostattributes<-,它接收一个列表并尝试将列表中的属性设置为其参数中的对象。至少,阅读源代码会给你一些关于如何检查对象之间属性的好主意。这是样本 a 向量上的一点 运行。它成功了,因为它没有违反 b

的任何属性
a = c(1,2,3)
attr(a,'name') <- 'numbers'

b <- a[-1]
attributes(b)
# NULL
mostattributes(b) <- attributes(a)
attributes(b)
# $name
# [1] "numbers"

这是检查名称的源代码示例。

    if (h.nam <- !is.na(inam <- match("names", names(value)))) {
        n1 <- value[[inam]]
        value <- value[-inam]
    }
    if (h.dim <- !is.na(idin <- match("dim", names(value)))) {
        d1 <- value[[idin]]
        value <- value[-idin]
    }
    if (h.dmn <- !is.na(idmn <- match("dimnames", names(value)))) {
        dn1 <- value[[idmn]]
        value <- value[-idmn]
    }
    attributes(obj) <- value

还有attr.all.equal。这不是您想要的操作,但我认为您也可以从阅读该源代码中受益。您可以在其中了解很多好的检查。