«Ошибка рекурсивной индексации на уровне 4» - PullRequest
0 голосов
/ 07 октября 2018

У меня есть список с именем PDay, который содержит 3 подсписка.Каждый подсписок содержит 6 кадров данных.Чтобы распечатать все кадры данных (PDay [[1]] [[1]], PDay [[1]] [[2]], ...), я должен ввести следующий код:

    A<-seq_len(3)
    B<-seq_len(6)
    F1<-function(x,y){
      PDay[[y]][[x]]
    }
    c(outer(B,A,F1))

Это моя ошибка: «Ошибка рекурсивной индексации на уровне 4»

Что не так с моим кодом?Как я могу исправить это?

Спасибо

РЕДАКТИРОВАТЬ: нет вложенных циклов, пожалуйста.Просто функция external ().

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Для успеха outer необходимо иметь функцию, которая векторизована как минимум в x.Функция «[[» не может использоваться для доставки векторизованного результата.Этот подход был протестирован на небольшом примере, который вы указали, но он должен быть достаточно общим:

F1<-function(x,y){
       print( PDay[[y]][[x]] )
     }
 VF1 <- Vectorize(F1)
 outer(B,A,VF1)

Когда вы запустите его, вы заметите, что сначала вы видите напечатанные результаты фреймов данных, а затем матрицу списков.Если вы хотите, чтобы этот матричный результат был подавлен, вы могли бы присвоить его имени как часть вызова к внешнему (используя функцию VF1 только для побочного эффекта печати), а затем rm(the_name).

  junk_name=outer(B,A,VF1)
  rm(junk_name)

ИДругой способ подавления вывода outer при получении побочных эффектов печати - с помощью функции invisible:

 invisible( outer(B,A,VF1) )
0 голосов
/ 07 октября 2018

Почему бы просто:

print(PDay)

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

lapply(PDay, function(x) lapply(x, print))
...