R: Создание новых переменных в цикле for и присваивание значений - PullRequest
0 голосов
/ 18 марта 2019

Я хотел бы создать новую переменную, назначить список значений и записать в иерархический фрейм данных.Я попробовал ниже, но это не пишет.

for(i in 1:sample){
    for(j in 1:10){
      x[,j]<-0
      name <- paste("hierdata[[i]]$Test", j, sep = "_")
      assign(name, rowSums(alpha+beta+x)))
    }
}

Оцените некоторую помощь.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Чтобы ответить на комментарий @Moody_Mudskipper:

Лучший способ объявить иерархические данные - это использовать индексированные списки:

hierdata <- lapply(1:sample,
       function(iterator)
         {
         temp_list <- lapply(1:10,
                function(j)
                  {
                  x[,j]<-0
                  value <- rowSums(alpha+beta+x)
                  return(value)
                })
         names(temp_list) <- lapply(1:10,function(j){paste0("temp_",j)})
         return(temp_list)
       })

на самом деле не одинлайнер ", но он содержит все хорошие" вещи ".Lapply, который возвращает список по умолчанию, поэтому он просто вкладывает список в каждый список.

Надеюсь, вам понравится "хорошая практика".:) Я просто хотел ответить на ваш вопрос именно с первой попытки.

0 голосов
/ 18 марта 2019

Попробуйте использовать

for(i in 1:sample){
  hierdata[[i]] <- list()
  for(j in 1:10){
    code_j_init <- paste0("hierdata[[",i,"]]$Test_",j,"<- list()")
    eval(parse(text = code_j_init))
    hierdata[[i]][[j]] <- list(1,2,3)
  }
}

или

for(i in 1:sample){
  hierdata[[i]] <- list()
  names <- c()
  for(j in 1:10){
    hierdata[[i]][[j]] <- list(1,2,3)
    names <- c(names,paste0("Test_",j))
  }
  names(hierdata[[i]]) <- names
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...