R 子集()将属性放置在向量上;如何维护/保持它们?
假设我有一个向量,我在其中设置了一些属性:R 子集()将属性放置在向量上;如何维护/保持它们?,r,vector,attributes,subset,persistent,R,Vector,Attributes,Subset,Persistent,假设我有一个向量,我在其中设置了一些属性: vec <- sample(50:100,1000, replace=TRUE) attr(vec, "someattr") <- "Hello World" > vec[1:5] [1] 1 2 3 4 5 `[.foo` <- function(x, i, ...) { attrs <- attributes(x) out <- unclass(x) out <- out[i]
vec <- sample(50:100,1000, replace=TRUE)
attr(vec, "someattr") <- "Hello World"
> vec[1:5]
[1] 1 2 3 4 5
`[.foo` <- function(x, i, ...) {
attrs <- attributes(x)
out <- unclass(x)
out <- out[i]
attributes(out) <- attrs
out
}
vec我将为[
或subset()
(取决于您的子集设置)编写一个方法,并安排该方法以保留属性。这将需要一个“class”
属性也添加到您的向量中,以便进行分派
vec <- 1:10
attr(vec, "someattr") <- "Hello World"
class(vec) <- "foo"
如果我们添加一个方法[.foo
,我们可以保留以下属性:
vec <- sample(50:100,1000, replace=TRUE)
attr(vec, "someattr") <- "Hello World"
> vec[1:5]
[1] 1 2 3 4 5
`[.foo` <- function(x, i, ...) {
attrs <- attributes(x)
out <- unclass(x)
out <- out[i]
attributes(out) <- attrs
out
}
奖金问题的答案是:
从详细信息部分的?“[”
:
子集设置(除空索引外)将删除除名称、dim和dimnames之外的所有属性。多亏了与my@G.Grothendieck类似的答案,您可以使用collapse::fsubset
请参见
库(折叠)
#tmp_vec 80)
tmp_vec 80)#fsubset的快捷方式
属性(tmp_vec)
#$somettr
#[1]“你好,世界”
Thx获取答案!顺便说一句,对于子集列表,在将属性传输到out之前,可以包括,if(!is.null(attrs$names))attrs$names=names(x)[i]
也要将列表名称子集。否则可能会导致错误。现在有一个包在幕后执行此操作,尽管我不确定repo有多活跃,也有一些限制。@Hadley Wickham还详细解释了如何执行此操作,以及一个帮助器genericsloop::Reconstructure()
来自尚未发布的软件包。最后,我刚刚在