Отслеживание родительского списка во вложенном списке - PullRequest
1 голос
/ 18 апреля 2019

У меня есть вложенный цикл, который мне нужно перебрать. Я хочу перейти в конец списка (в данном случае второй элемент родительского списка) и добавить в него элемент, если он больше не является вложенным циклом. Так что цикл может иметь много уровней вложенного цикла. Прямо сейчас я получаю только второй список в качестве возврата. Как отследить родительский список?

a <- list( x = list(1,2,3),y =list(4,5,6))
 con=TRUE
 while(con){
 i <-length(a)
 for(k in i:i){
 if(!typeof(a[[k]])=="list"){
   a[[k+1]] <- "test"
   con=FALSE
  }else{
  a <- a[[k]]
   i <- length(a)
 }
 }
}


Expected Result:a <- list(x = list(1,2,3), y =list(4,5,6, "test"))
Result: a <- list(4,5,6,"test")

1 Ответ

0 голосов
/ 18 апреля 2019
library(magrittr)
a <- list( x = list(1,2,3),y =list(4,5,6), z = 1)

temp <- lapply(a, typeof) %>% unlist
tempList <- (temp!="list")

if (sum(tempList) > 0) {
  a[[max(which(tempList == FALSE))]] %<>% append("test")
} else {
  a[[length(a)]] %<>% append("test")
}

Мне не ясно, чем вы хотите заниматься, но просто сконцентрируясь на вашем примере, это будет работать.

Вкратце, посмотрите, какие элементы родительского списка не являются списками, и для последнего из них добавьте «test». Если все они являются списками, то добавьте «тест» к последнему.

...