首页 > 解决方案 > 重命名列表特定元素的函数

问题描述

我有一个包含多个列表的列表。在这些列表中的每一个中,都有一个名为数字向量。对于某些列表,我想使用函数更改此向量的名称。这个函数应该允许我指定高级列表,以及我想要更改的嵌套列表组。

这是一个玩具示例:

# construct a toy list

mylist <- list()

mylist[["type_1"]]$namednum <- c(runif(4))
names(mylist[["type_1"]]$namednum) <- c("A", "B", "C", "D")
mylist[["type_1"]]$somethingelse <- "something"

mylist[["type_2"]]$namednum <- c(runif(4))
names(mylist[["type_2"]]$namednum) <- c("A", "B", "C", "D")
mylist[["type_2"]]$somethingelse <- "something"

mylist[["type_3"]]$namednum <- c(runif(4))
names(mylist[["type_3"]]$namednum) <- c("A", "B", "C", "D")
mylist[["type_3"]]$somethingelse <- "something"

# function to change vector names within nested lists

renamefct <- function(element_names, element) {
  for(i in element_names) {
    names(element[[i]]$namednum) <- c("Var1", "Var2", "Var3", "Var4")
    print(names(element[[i]]$namednum))
  }
}

# vector specifying which nested lists to change

element_names1 <- c("type_1", "type_3")

当我现在运行这样的函数时:

renamefct(element_names1, mylist)

names(mylist[["type_1"]]$namednum) # see whether change has happened

我看到该函数完成了它的工作,但不适用于全局环境中的对象。从这样的帖子中,我了解到这与函数修改本地命名空间中对象的副本以及编写替换函数的需要有关。但是,按照链接帖子中的建议定义我的功能:

`renamefct<-` <- function(element_names, element) {
  for(i in element_names) {
    names(element[[i]]$namednum) <- c("Var1", "Var2", "Var3", "Var4")
    print(names(element[[i]]$namednum))
  }
}

给我一个错误:

renamefct(element_names1,mylist)出错:找不到函数“renamefct”

注意:我知道可能有比循环更好的方法,但一次迈出一步。

标签: rlist

解决方案


修改功能:

renamefct <- function(element_names, element) {
  for(i in element_names) {
    names(element[[i]]$namednum) <- c("Var1", "Var2", "Var3", "Var4")
  }
  return(element)
}

这有效:

mylist <- renamefct(element_names1, mylist)

names(mylist[["type_1"]]$namednum) 
[1] "Var1" "Var2" "Var3" "Var4"

推荐阅读