从node.js调用R脚本发布加载库

时间:2019-04-07 19:08:10

标签: javascript r node.js

我正在使用'r-script'npm软件包从node.js运行R脚本。该R脚本调用另一个R脚本,该脚本加载了很多库。我收到一个错误消息“后端没有包'zoo'。我有R版本3.5.3,当我从RStudio运行这些R文件时,它运行得很顺利。我在环境设置中正确定义了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 个答案:

答案 0 :(得分:0)

我找到了解决方案。如github上的“ r-script” npm软件包的文档所述,您应该使用needs()而不是library()或require()来加载软件包。因此,我从RStudio安装了“需要”软件包。安装后,它会提示您,无论何时调用该软件包中的函数,您都希望自动加载该软件包。您将无法从此处成功进行响应,因为您将需要写权限。因此,以管理员身份打开命令提示符,通过键入(R)加载R,然后运行library(需要)。现在,您再次得到提示,请选择是,然后完成。