Извлечение элементов разного размера из списка в пределах al oop в R - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть набор из 94 списков, каждый с разным количеством элементов, и каждый элемент разной длины. Пример из одного из списков показан ниже

 > head(output)
 $clusters
 $clusters[[1]]
 [1] "cookie" "duckie" "seven"  "sticky"

 $clusters[[2]]
  [1] "a"      "ah"     "ball"   "blue"   "boo"    "boy"    "bunny"  "bye"    "eight"  "eye"    
 "five"   "go"     "goose"  "he's"   "hello"  "hey"    "hi"     "is"     "it"     "it's"   "leaf"   
 "meow"   "moon"   "no"    
 [25] "oh"     "one"    "ooh"    "pop"    "shh"    "six"    "that"   "this"   "towel"  "two"    
 "uhoh"   "wee"    "what"   "what's" "whoa"   "wow"    "yay"    "yellow" "yes"   


 $edges
 [1] 44 45

Я создаю al oop, который извлекает части списка - в примере, показанном выше, я хотел бы извлечь clusters[[1]] и clusters[[2]].

Я получил следующий код:

   for (i in length(output)) {  
     values <- output[[1]][i]
         }

Но это возвращает только второй элемент, clusters[[2]]. Я хотел бы сохранить элементы из каждого списка как отдельные кадры данных, как в следующих примерах:

 library(tibble)

 values1 <- tribble(~V1,
           "cookie",
           "duckie",
           "seven",
           "sticky") 

 values2 <- tribble(~V1,
           "a",
           "ah",
           "ball",
           "blue",
           "boo",
           "boy",
           "bunny",
           "etc") 

Как я могу сделать это, чтобы я мог быстро запустить его через 94 различных размера списки

1 Ответ

1 голос
/ 23 апреля 2020

Если вы хотите работать с фреймом данных из одного столбца для каждой записи кластера, вы можете go сделать так:

for (cluster_number in seq_along(output$clusters)) {
  current_cluster_df <- data.frame(
    V1 = output$clusters[[cluster_number]],
    stringsAsFactors = FALSE
  )
  # Do whatever you want with the data frame
}

Ключ доступа к output$cluster[i] для всех действительных индексов , seq_along(list) вернет вектор этих допустимых индексов (представьте себе более надежную версию 1:length(list)).

Ваш исходный код имеет две проблемы: 1. length(output) - это не length(output$clusters) и 2. вы используйте for (i in length(output)). Это для l oop, где i проходит только через одно значение, а именно length(output), которое оказывается равным 2, что случайно также является допустимым индексом для output$clusters.

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