Подтвердить что ты не робот

Переопределение "Переменные не показаны" в dplyr, чтобы отобразить все столбцы из df

Когда у меня есть столбец в локальном фрейме данных, иногда я получаю сообщение Variables not shown, например, этот (нелепый) пример, которому достаточно всего столбцов.

library(dplyr)
library(ggplot2) # for movies

movies %.% 
 group_by(year) %.% 
 summarise(Length = mean(length), Title = max(title), 
  Dramaz = sum(Drama), Actionz = sum(Action), 
  Action = sum(Action), Comedyz = sum(Comedy)) %.% 
 mutate(Year1 = year + 1)

   year    Length                       Title Dramaz Actionz Action Comedyz
1  1898  1.000000 Pack Train at Chilkoot Pass      1       0      0       2
2  1894  1.000000           Sioux Ghost Dance      0       0      0       0
3  1902  3.555556     Voyage dans la lune, Le      1       0      0       2
4  1893  1.000000            Blacksmith Scene      0       0      0       0
5  1912 24.382353            Unseen Enemy, An     22       0      0       4
6  1922 74.192308      Trapped by the Mormons     20       0      0      16
7  1895  1.000000                 Photographe      0       0      0       0
8  1909  9.266667              What Drink Did     14       0      0       7
9  1900  1.437500      Uncle Josh Nightmare      2       0      0       5
10 1919 53.461538     When the Clouds Roll by     17       2      2      29
..  ...       ...                         ...    ...     ...    ...     ...
Variables not shown: Year1 (dbl)

Я хочу видеть Year1! Как увидеть все столбцы, желательно по умолчанию.

4b9b3361

Ответ 1

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

options(dplyr.width = Inf)

Я написал его здесь.

Ответ 2

Вам может понравиться glimpse:

> movies %>%
+  group_by(year) %>%
+  summarise(Length = mean(length), Title = max(title),
+   Dramaz = sum(Drama), Actionz = sum(Action),
+   Action = sum(Action), Comedyz = sum(Comedy)) %>%
+  mutate(Year1 = year + 1) %>% glimpse()
Variables:
$ year    (int) 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,...
$ Length  (dbl) 1.000000, 1.000000, 1.000000, 1.307692, 1.000000, 1.000000,...
$ Title   (chr) "Blacksmith Scene", "Sioux Ghost Dance", "Photographe", "Ve...
$ Dramaz  (int) 0, 0, 0, 1, 0, 1, 2, 2, 5, 1, 2, 3, 4, 5, 1, 8, 14, 14, 14,...
$ Actionz (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Action  (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Comedyz (int) 0, 0, 0, 1, 2, 2, 1, 5, 8, 2, 8, 10, 6, 2, 6, 8, 7, 2, 2, 4...
$ Year1   (dbl) 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,...NULL

Ответ 3

dplyr имеет собственные функции печати для объектов dplyr. В этом случае объектом, являющимся результатом вашей операции, является tbl_df. Соответствующая функция печати тогда dplyr:::print.tbl_df. Это показывает, что trunc_mat является функцией, ответственной за то, что напечатано, а не, включая переменные.

К сожалению, dplyr:::print.tbl_df не передает никаких параметров в trunc_mat, а trunc_mat также не поддерживает выбор переменных (только количество строк). Обходным путем является вывод результата dplyr в data.frame и использование head:

res = movies %.% 
 group_by(year) %.% 
 summarise(Length = mean(length), Title = max(title), 
  Dramaz = sum(Drama), Actionz = sum(Action), 
  Action = sum(Action), Comedyz = sum(Comedy)) %.% 
 mutate(Year1 = year + 1)

head(data.frame(res))
  year    Length                       Title Dramaz Actionz Action Comedyz
1 1898  1.000000 Pack Train at Chilkoot Pass      1       0      0       2
2 1894  1.000000           Sioux Ghost Dance      0       0      0       0
3 1902  3.555556     Voyage dans la lune, Le      1       0      0       2
4 1893  1.000000            Blacksmith Scene      0       0      0       0
5 1912 24.382353            Unseen Enemy, An     22       0      0       4
6 1922 74.192308      Trapped by the Mormons     20       0      0      16
  Year1
1  1899
2  1895
3  1903
4  1894
5  1913
6  1923

Ответ 4

Итак, это немного устарело, но я нашел это, когда искал ответы на одну и ту же проблему. Я придумал это решение, которое соответствует духу трубопровода, но идентично функции принятого ответа (обратите внимание, что символ трубы %.% устарел в пользу %>%)

movies %>% 
    group_by(year) %>% 
    summarise(Length = mean(length), Title = max(title), 
    Dramaz = sum(Drama), Actionz = sum(Action), 
    Action = sum(Action), Comedyz = sum(Comedy)) %>% 
    mutate(Year1 = year + 1) %>%
    as.data.frame %>%
    head

Ответ 5

movies %.% group_by(year) %.% ....... %.% print.default

dplyr использует вместо опции печати по умолчанию dplyr:::print.tbl_df, чтобы убедиться, что ваш экран не перегружен огромными наборами данных. Когда вы, наконец, уничтожили свои вещи так, как хотите, и не хотите, чтобы вас больше не спасли от ваших собственных ошибок, просто нажмите print.default, чтобы выплевывать все.


BTW, methods(print) показывает, сколько пакетов необходимо написать свои собственные функции print (подумайте, например, igraph или xts), это новые типы данных, поэтому вам нужно рассказать им, как для отображения на экране).

HTH следующий googler.