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

时间:2015-01-01 23:58:36

标签: r

我有一个初始变量:

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

应谨慎使用。有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。这不是你想要的操作,但我认为你也会从阅读源代码中受益。你可以从中学到很多好的检查。