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
。这不是您想要的操作,但我认为您也可以从阅读该源代码中受益。您可以在其中了解很多好的检查。
我有一个初始变量:
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
。这不是您想要的操作,但我认为您也可以从阅读该源代码中受益。您可以在其中了解很多好的检查。