R: "формальные классы не могут использоваться без пакета" методы "ошибка с использованием nrow

Я не могу выполнить программу R, так как она дает сообщение об ошибке в заголовке. Я сократил программу до минимума, который воспроизводит сообщение об ошибке (R 3.4.4):

$ cat countRows.R
countRows <- function(data)
{
        m <- readRDS(data)
        message("Number of rows in m@data: ", nrow(m@data)))
}

# Test function
countRows("~/data/prediction.rds")

$ Rscript countRows.R
Error in nrow(m@data) : 
  formal classes cannot be used without the 'methods' package
Calls: countRows -> message -> paste0 -> nrow
Execution halted

nrow является частью пакета base, и я могу использовать его в интерактивной консоли без проблем (или без каких-либо важных пакетов). Предыдущая тема дает команду «перезапустить сеанс», но я считаю, что это не относится к nrow.

Что здесь не так?

Почему бы не сделать nrow(m)? Предполагая, что m - это фрейм данных.

Elin 10.08.2018 16:34
1
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Формальные классы (также называемые классами S4), как подсказывает ошибка, для правильной работы требуется пакет methods. Когда вы используете интерактивную консоль R или RStudio, пакет прикрепляется автоматически. Однако Rscript делает это с помощью нет. Попробуйте добавить library(methods) в начало countRows.R.

Обновлено: это поведение изменилось в R 3.5.0. В соответствующей записи НОВОСТЕЙ говорится:

If --default-packages is not used, then Rscript now checks the environment variable R_SCRIPT_DEFAULT_PACKAGES. If this is set, then it takes precedence over R_DEFAULT_PACKAGES. If default packages are not specified on the command line or by one of these environment variables, then Rscript now uses the same default packages as R. For now, the previous behavior of not including methods (package) can be restored by setting the environment variable R_SCRIPT_LEGACY to yes.

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