У меня есть список, который содержит несколько списков. В каждом из этих списков есть названный числовой вектор. Для некоторых списков я хочу изменить имена этого вектора с помощью функции. Эта функция должна позволять мне указывать высокоуровневый список и группу вложенных списков, которые я хочу изменить.
Вот игрушечный пример:
# 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"
Примечание: я знаю, что, возможно, есть лучшие способы, чем цикл, но по одному шагу за раз.