r - 如何在R中以有效的方式重命名列表列表中的元素?

标签 r

我目前有一个包含大约 5000 个元素的大列表。一个可重现的例子是:

List.5000 <- replicate(5000, c(list(A='A',value.A=10),list(B='B',value.B=20)), simplify = F)

其中有:
> List.5000
[[1]]
[[1]]$A
[1] "A"

[[1]]$value.A
[1] 10

[[1]]$B
[1] "B"

[[1]]$value.B
[1] 20


[[2]]
[[2]]$A
[1] "A"

[[2]]$value.A
[1] 10

[[2]]$B
[1] "B"

[[2]]$value.B
[1] 20
....

当我调用 names(List.5000)它返回 NULL .但是当我调用 names(List.5000[[1]]) , 它给:
"A"       "value.A" "B"       "value.B"

我想改名"B""Z" .有没有办法做到这一点而无需创建一个新列表,然后循环和重建?

最佳答案

for(i in seq_along(List.5000))
  names(List.5000[[i]])[names(List.5000[[i]]) == 'B'] <-  'Z'

或者,如果您喜欢 lapply/map :
List.5000 <- lapply(List.5000, 
                    function(x) {names(x)[names(x) == 'B'] <-  'Z'; x})

library(purrr)
List.5000 <- map(List.5000, ~{names(.)[names(.) == 'B'] <-  'Z'; .})

如果名字真的都一样,你可以这样做
ind <- names(List.5000[[1]]) == 'B'
for(i in seq_along(List.5000))
  names(List.5000[[i]])[ind] <-  'Z'

括号语法要快一点:
x <- List.5000[[1]]
microbenchmark(
  sub = names(x) <- sub("^B$", "Z", names(x))
  , ifelse = names(x) <- ifelse(names(x) == 'B', 'Z', names(x))
  , stringi = names(x) <- str_replace(names(x), "^B$", "Z")
  , replace = names(x) <- replace(names(x), names(x) == 'B', 'Z')
  , bracket = names(x)[names(x) == 'B'] <-  'Z'
)
# Unit: microseconds
# expr        min       lq      mean   median       uq     max neval
# sub      22.041  31.2265  58.24097  46.9650  78.5075 373.637   100
# ifelse   13.309  22.4110  44.00665  30.2235  65.1395 113.693   100
# stringi 153.880 313.0400 346.41543 358.4795 383.4130 631.354   100
# replace   4.067   6.3205  13.09022   8.1760  11.9280  54.075   100
# bracket   3.246   4.5265  10.38177   5.9180   7.9925  55.278   100

仍然有点不满意,因为这些方法都没有修改列表。

关于r - 如何在R中以有效的方式重命名列表列表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663249/

相关文章:

r - 在 R 中将重音符号转换为 ASCII

r - 计算方程的累积和

r - 以编程方式向 stat_function() 添加颜色和图例

r - 在目录中导入最新的 csv 文件

r - 使用 mean_cl_boot 获取 stat_summary 计算的值

R PCA : With the fviz_pca_ind function, 我们可以有两个分类变量 : one point shape and one fill color?

r - 如何从 data.frame 中的列获取最大值并获取所有记录

r - 在 data.table 中按组缩放

r - 使用 R pheatmap 包时有没有办法关闭聚类?

r - 在 R 中生成五分位数并重新编码多个变量