Вопрос или проблема
На сегодняшний день использование параметра n
в функции print
больше не работает.
Я полагаю, это связано с моим обновлением до R версии 4.1.1, но я не смог найти об этом ничего в заметках о релизе.
Ранее работало, но теперь не работает:
mtcars |>
print(n = Inf)
Есть идеи, как я могу использовать такую команду print
, чтобы определить количество строк для вывода? Это важно при отображении tibbles, которые по умолчанию показывают только несколько строк.
ОБНОВЛЕНИЕ: хотя моя основная цель — определить отображаемые строки в tibbles, print(n = Inf)
ранее также работала с обычными данными фреймами (что сейчас не так).
Когда вы используете print
, вы предполагаете, что хотите использовать метод print.tbl
, но mtcars
не является tbl
, поэтому R пытается использовать метод print
по умолчанию, который вызывает print.data.frame
, а тот, в свою очередь, вызывает print.default
, который имеет аргумент na.print
, и вы не можете указать Inf
для этого аргумента.
Поэтому сначала преобразуйте ваш фрейм данных в tbl
:
mtcars |>
tibble() |>
print(n=Inf)
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
Редактирование: я забыл упомянуть, что так как R позволяет сокращенные имена аргументов, n
будет считаться na.print
.
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что в R версии 4.1.1 и позже использование параметра n = Inf
в функции print()
вызывает ошибку "invalid ‘na.print’ specification". Это происходит из-за того, что в контексте функции print()
подразумевается, что аргументы, переданные в функцию, могут быть интерпретированы как другие параметры, такие как na.print
.
Почему это происходит
Когда вы вызываете print(n = Inf)
с объектом, который не является табличным (например, стандартный дата-фрейм mtcars
), R считает, что вы пытаетесь указать значение для na.print
, которое предназначено для отображения NA значений в выводе. Параметр n
не распознается корректно, и это приводит к ошибке.
Как исправить
Чтобы избежать этой ошибки, вы можете использовать один из следующих подходов:
-
Преобразовать объект в tibble:
Конвертируйте ваш дата-фрейм в tibble, который поддерживает аргумент
n
для отображения строк. Пример:library(tibble) mtcars %>% as_tibble() %>% print(n = Inf)
Здесь мы используем
as_tibble()
для преобразованияmtcars
в tibble, после чего аргументn = Inf
будет работать корректно. -
Установить значение для
options
:Если ваша цель — установить глобальное значение для отображения всех таблиц в сеансе R, вы можете использовать
options()
для изменения значенияtibble.print_max
иtibble.print_min
. Например:options(tibble.print_max = Inf, tibble.print_min = Inf) # Теперь при выводе tibble, все строки будут отображаться print(mtcars)
Заключение
Таким образом, чтобы избежать ошибок, убедитесь, что вы работаете с объектами типа tibble, если хотите использовать параметры вывода, специфичные для tibble. Преобразование ваших данных в tibble или использование глобальных параметров через options()
помогут вам в отображении всех строк без ошибок.