Я написал пакет Boggler, который включает в себя Play.Boggle(), которая вызывает в строке 87 индикатор выполнения с использованием shell
:
shell(cmd = sprintf('Rscript.exe R/progress_bar.R "%i"', time.limit + 1), wait=FALSE)
Все работает нормально при поиске файлов по отдельности и последующем вызове основной функции Play.Boggle()
, но когда я пытаюсь проверить/собрать пакет (под Win7-64 с использованием RStudio), я получаю сообщение об ошибке - вот что сообщает 00install.out
:
** preparing package for lazy loading
Warning in eval(expr, envir, enclos) : NAs introduced by coercion
Error in time.limit:0 : NA/NaN argument
Чтобы убедиться, что аргумент "%i" (time.limit + 1) был правильно передан в progress_bar.R
, я добавил в скрипт cat(time.limit)
(остальное закомментировал, чтобы убедиться, что пакет будет собран без ошибок) и направил его вывод в файл журнала, как это:
'Rscript.exe R/progress_bar.R "%i" > out.log'
Вывод: срок действительно пройден, как и ожидалось. Поэтому я не могу понять, почему я получаю это сообщение об ошибке "аргумент NA/NaN". Это должно быть как-то связано с ленивой загрузкой, концепцией, которую я еще не полностью понял.
Итак, мой вопрос: что я могу сделать, чтобы успешно проверить/собрать этот пакет с полной функциональностью (включая progress_bar.R)?
Примечание. На github есть скрипт progress_bar.R, но все его содержимое закомментировано, чтобы пакет можно было успешно установить. Вызов функции оболочки(...) по-прежнему активен, ничего не делая, кроме выполнения пустого скрипта.
time.limit <- as.numeric(commandArgs(trailingOnly = TRUE)[1])
. - person Roland   schedule 12.03.2015time.limit
, ни кавычки тут не причем, я это уже тщательно проверил; Я имею в виду, что если я закомментирую только часть tk скрипта progress_bar.R, все будет работать нормально. Кроме того, не забывайте, что поиск файлов по отдельности, без упаковки всего, работает отлично (включая индикатор выполнения). - person Dominic Comtois   schedule 12.03.2015commandArgs
... - person Roland   schedule 12.03.2015commandArgs(trailingOnly = TRUE)[1]
нельзя преобразовать в числовое, в результате чего получитсяNA
изas.numeric
. Таким образом,:
говорит вам, что ему было передано значениеNA
. Вместо вызоваshell
я бы использовал package parallel для распараллеливания. - person Roland   schedule 12.03.2015