Применение операции к каждому фрейму данных в глобальной среде - PullRequest
0 голосов
/ 07 декабря 2018

Я хотел бы создать матрицу прогнозирования (с использованием мышей) для каждого кадра данных в моей рабочей области.Я думал сделать следующее:

library(mice)
PredMatr = list()
try (for (i in 1:length(ls()))  {
  PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})

Но он останавливается, когда в рабочей области он сталкивается с чем-то отличным от кадра данных.Как я могу адаптировать свой код, чтобы сделать операцию условной для объекта, являющегося кадром данных?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

вы можете использовать eapply, чтобы проверить, какие объекты в среде являются классом data.frame и работают только с ними.Например, используйте:

Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]

и теперь Myls - это список имен объектов, которые data.frame.Затем они могут быть введены в get()

eapply, как lapply, но это относится к каждому объекту в среде, а не к каждому объекту в списке.

Изменить, чтобы добавить: Чтобы использовать это в исходной задаче, вы можете сделать следующее:

library(mice)
PredMatr = list()
Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]
try (for (i in 1:length(Myls))  {
  PredMatr [[i]]=quickpred(get(Myls[i]), mincor=.1)
})
0 голосов
/ 07 декабря 2018

Вы можете добавить

if(!is.data.frame(get(ls()[i]))) next;

к вашему коду, тогда цикл будет переходить к следующей итерации, когда он встречает структуру не-data.frame.

Ответ накомментарий

library(mice)
PredMatr = list()
try (for (i in 1:length(ls()))  {

  if(!is.data.frame(get(ls()[i]))) next;

  PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})

Нужно сделать свое дело.

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