Функция для переименования определенных элементов списка - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть список, который содержит несколько списков. В каждом из этих списков есть названный числовой вектор. Для некоторых списков я хочу изменить имена этого вектора с помощью функции. Эта функция должна позволять мне указывать высокоуровневый список и группу вложенных списков, которые я хочу изменить.

Вот игрушечный пример:

# 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"

Примечание: я знаю, что, возможно, есть лучшие способы, чем цикл, но по одному шагу за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...