Цикл для просмотра всех фреймов данных в r

Попытка написать цикл для открытия всех фреймов данных в отдельных окнах в R

У меня есть следующий код, который, конечно, не работает:

for(i in ls()){
View(i)
}

Это просто открывает средство просмотра, где i является именем фрейма данных.

Я тоже пробовал лаппи безрезультатно.

Какие-нибудь советы

С Уважением

При условии, что все объекты в рабочей среде являются фреймами данных (или могут быть принуждены к ним), вы можете сделать это с помощью purrr::walk(ls(), View).

meriops 26.10.2018 08:40

У меня это не работает, он только снова печатает имя объектов.

kath 26.10.2018 08:46
0
2
236
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

ls() возвращает вектор символов с именами объектов в вашем рабочем пространстве. Давайте запустим этот пример в новом сеансе R:

x <- 1:4
y <- data.frame(x = x, y = 2*x)

ls()
[1] "x" "y"

Теперь, если вы проходите через ls(), вы перебираете вектор символов, а не ваше фактическое рабочее пространство. (Я использую print вместо View, чтобы поймать вывод цикла)

for(i in ls()){
  print(i)
}

[1] "x"
[1] "y"

Вы можете исправить это с помощью get, но вам нужно использовать lapply, поскольку с помощью цикла for вывод перезаписывается на каждой итерации:

lapply(ls(), function(i) {
  View(get(i))
})

Или вы используете mget(ls()), чтобы сначала получить объекты, а затем применить к ним View:

lapply(mget(ls()), View)

Лично я бы сохранил цикл for (или обернул lapply в invisible) и использовал бы второй аргумент View, как это сделал @Andre. Чтобы быть «безопаснее» в отношении того, что будет отображаться, я мог бы сделать следующее: использовать mode = "list" внутри mget, проверить, является ли элемент фреймом данных в цикле, использовать аргумент pattern для ls, чтобы убедиться, что я действительно открываю окно только для того, что я хочу.

Moody_Mudskipper 26.10.2018 11:15

привет кат, спасибо за ответ. Оба они работали. Я также пробовал вариант lapply до вашего комментария, который не сработал, теперь я понимаю, почему: lapply(ls(), View) Я могу закрыть это сейчас. Спасибо всем за ответы: D

e_conomics 28.10.2018 23:26
df1 <- mtcars
df2 <- mtcars
df3 <- mtcars

lapply(ls(),function(x){View(get(x),x);NULL})

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

Другие вопросы по теме