2012-06-27 2 views
1

Мне нужно выполнить некоторые команды в пакетном режиме (например, через Rscript). Они работают в интерактивном режиме, но не в пакетном режиме. Вот минимальный пример: sapply(1:3, is, "numeric"). Почему это работает в интерактивном режиме, но возвращает ошибку в пакетном режиме? Есть ли способ сделать команду, подобную этой работе, в пакетном режиме?вызов sapply() работает в интерактивном режиме, а не в пакетном режиме

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

testfun <- function (...) 
{ 
    args <- list(...) 
    if (any(!sapply(args, is, "numeric"))) 
    stop("All arguments must be numeric.") 
    else 
    writeLines("All arguments look OK.") 
} 

Мне нужно передать список этой функции. Команда типа testfun(list(1, 2, 3)) работает в интерактивном режиме. Но в пакетном режиме он выдает ошибку: Error in match.fun(FUN) : object 'is' not found. Я попробовал debugger(), чтобы разобраться с проблемой, но это не дало мне понимания. Я также просмотрел r-help, FAQ R, R Inferno, но я не мог найти ничего, что говорило бы об этой проблеме.

ответ

7

Rscript не загружает пакет методов по умолчанию, потому что это занимает много времени. Из Подробности части ?Rscript:

‘--default-packages=list’ where ‘list’ is a comma-separated list 
     of package names or ‘NULL’. Sets the environment variable 
     ‘R_DEFAULT_PACKAGES’ which determines the packages loaded on 
     startup. The default for ‘Rscript’ omits ‘methods’ as it 
     takes about 60% of the startup time. 

Вы можете сделать это загрузить методы, используя --default-packages аргумент.

> Rscript -e 'sapply(1:3, is, "numeric")' --default-packages='methods' 
[1] TRUE TRUE TRUE 
+0

спасибо. Так оно и было. – user697473

Смежные вопросы