我正在嘗試撰寫一個 RShiny 應用程式,它將接受一個 URL,讀入一個檔案并根據 URL 中的引數寫入另一個檔案。我的方法基于R Shiny REST API 通信這個答案。
下面是生成應用程式的最小功能代碼 - 當我從 Chrome 等瀏覽器運行它時(例如,只需輸入地址http://127.0.0.1/?outDest=test2),它將創建一個檔案。但是,如果我嘗試使用來自 httr 的 GET 呼叫來呼叫它,則會產生錯誤
找不到函式“data_read”
這是有道理的,因為該功能可用于服務器而不是 ui,至少是我的理解。
所以我想,我想做的是讓 UI 讀入并決議 GET 查詢——然后在服務器端觸發一個 reactiveEvent 來獲取該資料,但我無法生成我想要的輸出。
RShiny 有沒有辦法處理這個問題?或其他包裹 - 我應該看水管工嗎?
非常感謝, Aodhán
library(shiny)
library(rjson)
library(callr)
library(httr)
data_read <- function(x) {
json = fromJSON(file = x)
dat_df <- bind_rows(lapply(json,as.data.frame))
}
shiny_UI <- function(req) {
# The `req` object is a Rook environment
# See https://github.com/jeffreyhorner/Rook#the-environment
if (identical(req$REQUEST_METHOD, "GET")) {
x = data_read("C:/Users/Z0049Y2S/Documents/test.json")
query_params <- parseQueryString(req$QUERY_STRING)
#print(query_params)
if(length(query_params$outDest) ){
output_Destination = query_params$outDest
print(output_Destination)
write.csv("Hello",paste0(output_Destination,".csv"))
}
fluidPage(
h1("Accepting POST requests from Shiny")
)
}
}
shiny_Server <- function(input, output, session) {
}
uj5u.com熱心網友回復:
閃亮的應用程式實際上是為通過 websockets 與客戶端通信而設計的。對于處理 HTTP 請求,您可能需要考慮不同的方法,例如plumberAPI。
這是一個量身定制的示例:
p <- callr::r_bg(
function() {
library(plumber)
pr() |>
pr_handle("GET", "/", function(outFile) {
write("Hello", outFile)
}) |>
pr_run(port = 9850)
}
)
httr::GET("http://127.0.0.1:9850?outFile=hello.txt")
readLines("hello.txt")
p$kill()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471503.html
