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_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”
注意:我知道可能有比循环更好的方法,但一次迈出一步。
解决方案
修改功能:
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"
推荐阅读
- node.js - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:4321
- orm - 关系数据库的微服务
- sql - 如何在rails中查找每个类别的最后日期对应的数据
- php - Laravel Sanctum 和 Vue - 未经身份验证
- android - 如何在 build.gradle 中添加 if 条件?
- isabelle - Isabelle 对 HOL 以外的理论的自动化支持是什么?
- c# - Power-Ups增加射弹统计数据
- java - 为什么 vscode 无法保存 java 文件?我应该检查哪个设置?
- git - 我可以恢复从 git 提交中省略时被覆盖的文件吗?
- flutter - 如何将 ReorderableListView 的大小调整为所有孩子的高度