我正在尝试使用shiny-server作为进程服务器:接收URL请求,处理R子例程并输出JSON作为结果。但是我无法用JSON直接将输出打印到浏览器。
是否可以这种方式使用闪亮服务器?
PD:我知道这不是闪亮服务器的典型用途非常感谢!
答案 0 :(得分:8)
我今天发现这个包装了R函数RPC / REST-ish:
https://github.com/trestletech/plumber
通过评论R函数:
#' @get /mean
normalMean <- function(samples=10){
data <- rnorm(samples)
mean(data)
}
#' @post /sum
addTwo <- function(a, b){
as.numeric(a) + as.numeric(b)
}
您可以将其公开为网络API:
> library(plumber)
> r <- plumb("myfile.R") # Where 'myfile.R' is the location of the file shown above
> r$run(port=8000)
答案 1 :(得分:7)
听起来您正在尝试使用闪亮的服务器构建REST或JSON-RPC Web服务。目前无法实现(使用Shiny Server v1.2)。
Shiny服务器呈现text / html模板(shinyUI)页面并使用WebSocket回调来填充内容。 @ScottChamberlain的答案将在Web浏览器的HTML正文中呈现JSON。这对于程序化网络请求不起作用。
我发现rApache,Rook和RJSONIO是JSON Web服务的强大且高效的解决方案。您需要熟悉Apache Web服务器的配置,并根据您的平台构建Apache模块。
rApache 是一个将R嵌入Apache Web服务器的模块,允许您托管Rook,brew和其他R框架。
Rook 定义了R应用程序和Web服务器之间的接口。这样可以轻松地使用正确的内容类型提供JSON有效内容。
其他选项包括:
答案 2 :(得分:0)
这个简单的解决方案怎么样?
https://gist.github.com/sckott/7478126
server.r
require(shiny)
require(RJSONIO)
shinyServer(function(input, output) {
output$jsonoutput <- renderText({
toJSON(list(a = 10, b = 12))
})
})
ui.r
require(shiny)
shinyUI(bootstrapPage(
mainPanel(
textOutput(outputId="jsonoutput")
)
))
文字打印不漂亮,但是......
另外,请看一下Shiny邮件列表中的这个答案:https://groups.google.com/forum/#!searchin/shiny-discuss/json $ 20output / shiny-discuss / -JYOXAeLCtI / kslvMve_FmIJ - Shiny并非真正用于将数据作为API提供。
答案 3 :(得分:0)
黑客攻击怎么样?
httpHandler = function(req){
message = list(value="hello")
return(list(status = 200L,
headers = list('Content-Type' = 'application/json'),
body = toJSON(message)))
}
shiny:::handlerManager$addHandler(shiny:::routeHandler("/myEndPoint",httpHandler) , "a_unique_id")
# then start your shiny app ...
答案 4 :(得分:0)
对我而言,它使用了verbatimTextOutput:
<强> ui.R 强>
verbatimTextOutput(outputId="jsonoutput")
server.R - 假设getMainData()返回要转换为json的数据
output$jsonoutput <- renderText({
data <- getMainData()
result <- jsonlite::prettify(jsonlite::toJSON(data, auto_unbox = TRUE), 4)
return(result)
})