2

我对 R 中的水管工包相当陌生。我有一个可以在我的机器上本地运行的工作 API,我可以使用以下代码从 Web 上的实时 JS 应用程序访问它:

r <- plumb("my_api_code.r")
r$run(host = "0.0.0.0", port = 8000)

我已经读到在我的个人笔记本电脑上托管 r 代码不是一个好主意,但我只是希望能够运行上述代码,打开一个 R 服务器会话,然后通过互联网从不同的机器用于演示目的。

有没有办法根据运行 R 会话的机器的 IP 地址通过互联网访问这个 api?我无法找到r$run r$host r$serve可用功能的文档。

4

2 回答 2

2

你可以试试这个在互联网上可用的情节/API

铅管

#' @get /plotly
#' @serializer htmlwidget
plotlygraph <- function(){
 library(plumber)
 library(plotly)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
 p <- plot_ly(data, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
   add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
   layout(yaxis = list(title = 'Count'), barmode = 'group')
 return(p)
}

在 R 控制台上使用以下命令运行上述代码

r <- plumber::plumb("plumbr.R")
r$run(host="0.0.0.0", port=8000)

运行此之后 Swagger 窗口将打开 有按钮“Get/Plotly”单击此然后单击“试用”单击“执行” 等待几秒钟

第1步:

https://i.stack.imgur.com/mEcg4.png

第2步:

https://i.stack.imgur.com/EapIw.png

第 3 步:

https://i.stack.imgur.com/h74C6.png

第4步:

[https://i.stack.imgur.com/9CkGc.png][4]

然后它在上面显示 HTML 代码,它给出了一个像这样的请求 URL

http://127.0.0.1:8000/plotly

复制该链接粘贴到浏览器中,您将看到该图

然后使用终端/命令提示符获取您的 IP ...

假设您的 IP 是“192.168.10.04”

复制它并用这样的替换它: -

http://192.168.10.04:8000/plotly

然后复制该链接并将其粘贴到另一个网络应用程序的 IFRAME

您将在新框架(网络应用程序)上看到您的 R Plot...

我认为这应该可以帮助你

于 2019-05-15T13:14:48.877 回答
1

给你它应该可以很好地工作

  • 知道你的笔记本电脑的ip
  • 其他人(在您的团队中)可以访问该 IP,即您在同一网络上,或者您的计算机具有全球有效的 IP
  • 没有防火墙阻止端口 8000
  • CORS 是由类似的东西启用的
#' @filter cors
cors <- function(req, res) {
   res$setHeader("Access-Control-Allow-Origin", "*")
   plumber::forward()
}

显然,这不是生产环境的答案,但仅适用于展示/测试。

于 2019-03-21T19:35:56.843 回答