8

Shiny-server をプロセス サーバーとして使用しようとしています。URL リクエストを受け取り、R サブルーチンを処理し、結果として JSON を出力します。出力をJSONでブラウザに直接出力できませんでした。

このように、shiny-server を使用することは可能ですか?

PD: これが光沢のあるサーバーの典型的な用途ではないことはわかっています

どうもありがとう!

4

5 に答える 5

8

今日、R 関数 RPC/REST っぽいものをラップするこの別のパッケージを見つけました。

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)
}

これを Web API として公開できます。

> library(plumber)
> r <- plumb("myfile.R")  # Where 'myfile.R' is the location of the file shown above
> r$run(port=8000)
于 2015-07-16T12:54:50.040 に答える
7

光沢のあるサーバーを使用して REST または JSON-RPC Web サービスを構築しようとしているようです。これは現在不可能です (Shiny Server v1.2 では)。

Shiny サーバーは text/html テンプレート (shinyUI) ページをレンダリングし、WebSocket コールバックを使用してコンテンツを取り込みます。@ScottChamberlain からの回答は、Web ブラウザーの HTML 本文に JSON をレンダリングします。これは、プログラムによる Web リクエストでは機能しません。

rApacheRook、およびRJSONIOが、JSON Web サービスの堅牢でパフォーマンスの高いソリューションであることがわかりました。Apache Web サーバーの構成と、プラットフォームによっては Apache モジュールの構築に慣れている必要があります。

rApacheは R を Apache Web サーバーに埋め込むモジュールで、Rook、brew、およびその他の R フレームワークをホストできるようにします。

Rookは、R アプリケーションと Web サーバー間のインターフェースを定義します。これにより、JSON ペイロードを適切なコンテンツ タイプで簡単に配信できます。

その他のオプションは次のとおりです。

  • OpenCPU - JSON RPCを明示的にサポートする専用の R HTTP サーバー
  • node-rio - RServe をインターフェースする node.js サーバー
  • FastRWeb - Web サーバーを RServe に接続するための CGI または PHP インターフェース
  • RServe - バイナリ R TCP/IP サーバー
  • httpuv - R 用の HTTP および WebSocket サーバー ライブラリ
  • R の組み込み rhttpd - 本番環境での使用は推奨されません
于 2014-10-14T14:01:17.613 に答える
1

私にとっては、verbatimTextOutputを使用して機能しました:

ui.R

verbatimTextOutput(outputId="jsonoutput")

server.R - json に変換されるデータが getMainData() によって返されると仮定します。

output$jsonoutput <- renderText({

data <- getMainData()


result <- jsonlite::prettify(jsonlite::toJSON(data, auto_unbox = TRUE), 4)

return(result)
})
于 2016-12-08T16:56:09.097 に答える
1

この単純な解決策はどうですか?

https://gist.github.com/skkott/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データを API として提供するようには設計されていません。

于 2013-11-15T02:25:35.323 に答える