我有一个包含几个列表的列表。在每个这些列表中,都有一个命名数字向量。对于某些列表,我想使用一个函数更改此向量的名称。此功能应允许我指定高级列表以及要更改的嵌套列表组。
这是一个玩具示例:
# 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”
注意:我知道,可能有比循环更好的方法,但一次只走一步。
答案 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"