我有一个初始变量:
a = c(1,2,3)
attr(a,'name') <- 'numbers'
现在我想创建一个新变量,它是a
的一个子集,然后它具有与a
相同的属性。是否有copy.over.attr
函数或其他东西可以做到这一点,而我不必进入内部并确定哪一个是用户定义的属性等。当我将多个属性附加到单个变量时,这会变得复杂。
答案 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
。这不是你想要的操作,但我认为你也会从阅读源代码中受益。你可以从中学到很多好的检查。