#javascript #r #node.js
#javascript #r #node.js
Вопрос:
Я использую пакет npm ‘r-script’ для запуска R-скрипта из node.js . Этот R-скрипт вызывает другой R-скрипт, который загружает множество библиотек. Я получаю сообщение об ошибке «в серверной части нет пакета «зоопарк». У меня R версии 3.5.3, и когда я запускаю эти R-файлы из RStudio, он работает без проблем. Я правильно определил переменную PATH в настройках среды. Я использую React для интерфейса.
Я попытался запустить приложение из командной строки от имени администратора, но оно по-прежнему выдает ту же ошибку.
// Серверная часть
//server.js
router.post("/putData", (req, res) => {
const {simid,delay,decay} = req.body;
let rout = R('rscript.R')
.data()
.callSync();
console.log(simid delay decay);
console.log(rout);
return res.json({success:true});
});
//rscript.R
#rscript.R
source("Main.R")
//Main.R
#Main.R
require(zoo)
require(quantmod)
require(Rcpp)
(And a lot of other libraries)
Я получаю следующую ошибку на стороне сервера:
[0] POST /api/putData 500 12314.741 ms - 578 /n
[0] Loading required package: zoo
[0] Loading required package: quantmod
[0] Loading required package: xtable
[0] Loading required package: tidyr
[0] Loading required package: hashmap
[0] Loading required package: Quandl
[0] Loading required package: Rcpp
[0] Loading required package: readr
[0] Loading required package: roll
[0] Loading required package: gridExtra
[0] Error in R script rscript.R
[0] 'there is no package called 'zoo''
Ответ №1:
Я нашел решение. Как упоминалось в документации к пакету npm ‘r-script’ на github, вы должны использовать needs() вместо library() или require() для загрузки пакета. Итак, я установил пакет ‘needs’ из RStudio. После установки он выдал запрос о том, хотите ли вы автоматически загружать этот пакет при каждом вызове функции из него. Вы не сможете успешно ответить отсюда, так как вам потребуется разрешение на запись. Итак, откройте командную строку от имени администратора, загрузите R, введя (R), а затем запустите library (needs). Теперь вы снова получите приглашение, выберите «Да», и все готово.