请考虑以下列表:

lst <- list(
  a = structure("x", class = "foo", type = "bar"),
  b = "y"
)
str(lst)
#> List of 2
#>  $ a: 'foo' chr "x"
#>   ..- attr(*, "type")= chr "bar"
#>  $ b: chr "y"

创建于2024-03-01年第reprex v2.1.0

当用另一个值替换类foo的元素时,我希望保留这些属性. 基本上,我希望有一种方法可以复制以下行为:

res <- (function(x, i, value) {
  attrs <- attributes(x[[i]])
  x[[i]] <- value
  attributes(x[[i]]) <- attrs
  x
})(lst, "a", "z")

str(res)
#> List of 2
#>  $ a: 'foo' chr "z"
#>   ..- attr(*, "type")= chr "bar"
#>  $ b: chr "y"

创建于2024-03-01年第reprex v2.1.0

我怎么能做到这一点?我想解决方案是实现一个`[[<-.foo`方法,但不知道如何使其工作?据我所知,这种方法将使用lst的类,而不是它所包含的元素的类.

我只想找一个基础的R解决方案.

推荐答案

lst[["a"]]可以更改,同时使用lst[["a"]][] <- "z"保留其属性.

#Example data
lst <- list(
  a = structure("x", class = "foo", type = "bar"),
  b = "y"
)
str(lst)
#List of 2
# $ a: 'foo' chr "x"
#  ..- attr(*, "type")= chr "bar"
# $ b: chr "y"

#Change element a, while keeping attributes
lst[["a"]][] <- "z"
str(lst)
#List of 2
# $ a: 'foo' chr "z"
#  ..- attr(*, "type")= chr "bar"
# $ b: chr "y"

R相关问答推荐

删除facet_wrap标签之间的水平线

随机森林回归:下拉列重要性

将非重复序列高效转换为长格式

删除列表中存储的数据帧内和数据帧之间的重复行

多个过滤器内的一个盒子在仪表板Quarto

将饼图插入条形图

R—将各种CSV数字列转换为日期

多个模拟序列间的一种预测回归关系

为了网络分析目的,将数据框转换为长格式列联表

2个Rscript.exe可执行文件有什么区别?

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

我如何go 掉盒子图底部的数字?

创建在文本字符串中发现两个不同关键字的实例的数据框

如何根据未知数的多列排除重复行

根据r中每行中的日期序列,使用列名序列创建新列

GOGPLATE geom_boxploy色彩疯狂

使用一个标签共享多个组图图例符号

如何在一个GGPLATE中绘制多个灰度平滑?

如何根据顺序/序列从数据框中排除值

Gggvenn为Venn增加了不存在的价值