子集化时保留属性和 类(rrapply?)
retain attributes and classes when subsetting (rrapply?)
来自 ?"["
的详细信息部分:
子集化(空索引除外)将删除除 names、dim 和 dimnames 之外的所有属性。
示例:
myobj <- structure(list(a = c(1, 2, 3), b = c(4, 5, 6)), class = "myclass")
attr(myobj, "someattr") <- "Hello World"
myobj
# $a
# [1] 1 2 3
# $b
# [1] 4 5 6
# attr(,"class")
# [1] "myclass"
# attr(,"someattr")
# [1] "Hello World"
因此,如果我对第一个位置进行子集化,属性和 classes 将被删除:
myobj[-c(2)]
# $a
# [1] 1 2 3
解决方法是创建一个method
,见here and here。
虽然解决方案很旧,但我想知道现在是否有 simpler/quicker 方法可以做到这一点,这样您就不必创建方法了? rrapply
浮现在脑海中,但我认为它只适用于将函数 f
递归应用于列表的一组元素:
library(rrapply)
rrapply(myobj, f = head, n = 1, how = "list")
# $a
# [1] 1
# $b
# [1] 4
# attr(,"class")
# [1] "myclass"
# attr(,"someattr")
# [1] "Hello World"
有没有一种方法可以使用 rrapply
以我想要保留属性的方式进行子集化 class 或者是否有更简单的方法来做到这一点?
谢谢
1)gv 试试get_vars(可以简写为gv)在崩溃包中:
library(collapse)
gv(myobj, -2)
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"
2) Base R or NULL out the components you don't want:
replace(myobj, 2, NULL)
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"
3) rrapply 我们可以将 rrapply 与 how = "prune" 一起使用。该条件确保仅返回具有指定名称的第一级组件。
library(rrapply)
cond <- function(x, .xname, .xpos) .xname %in% names(myobj)[-2] && .xpos == 1
rrapply(myobj, condition = cond, how="prune")
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"
来自 ?"["
的详细信息部分:
子集化(空索引除外)将删除除 names、dim 和 dimnames 之外的所有属性。
示例:
myobj <- structure(list(a = c(1, 2, 3), b = c(4, 5, 6)), class = "myclass")
attr(myobj, "someattr") <- "Hello World"
myobj
# $a
# [1] 1 2 3
# $b
# [1] 4 5 6
# attr(,"class")
# [1] "myclass"
# attr(,"someattr")
# [1] "Hello World"
因此,如果我对第一个位置进行子集化,属性和 classes 将被删除:
myobj[-c(2)]
# $a
# [1] 1 2 3
解决方法是创建一个method
,见here and here。
虽然解决方案很旧,但我想知道现在是否有 simpler/quicker 方法可以做到这一点,这样您就不必创建方法了? rrapply
浮现在脑海中,但我认为它只适用于将函数 f
递归应用于列表的一组元素:
library(rrapply)
rrapply(myobj, f = head, n = 1, how = "list")
# $a
# [1] 1
# $b
# [1] 4
# attr(,"class")
# [1] "myclass"
# attr(,"someattr")
# [1] "Hello World"
有没有一种方法可以使用 rrapply
以我想要保留属性的方式进行子集化 class 或者是否有更简单的方法来做到这一点?
谢谢
1)gv 试试get_vars(可以简写为gv)在崩溃包中:
library(collapse)
gv(myobj, -2)
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"
2) Base R or NULL out the components you don't want:
replace(myobj, 2, NULL)
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"
3) rrapply 我们可以将 rrapply 与 how = "prune" 一起使用。该条件确保仅返回具有指定名称的第一级组件。
library(rrapply)
cond <- function(x, .xname, .xpos) .xname %in% names(myobj)[-2] && .xpos == 1
rrapply(myobj, condition = cond, how="prune")
给予:
$a
[1] 1 2 3
attr(,"class")
[1] "myclass"
attr(,"someattr")
[1] "Hello World"