重命名列表中特定元素的功能

时间:2019-09-30 19:17:35

标签: r

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

这是一个玩具示例:

# 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_1"]]$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

我看到该功能可以完成它的工作,但对于全局环境中的对象却没有。从this之类的帖子中,我了解到,这与以下事实有关:函数修改了本地名称空间中对象的副本,并且需要编写替换函数。但是,请按照链接文章中的建议定义我的功能:

`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”

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

1 个答案:

答案 0 :(得分:0)

修改后的功能:

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"