簡體   English   中英

R Shiny:函數的無功值

[英]R Shiny: reactivevalues from function

我將幾個表存儲在.rds文件中,我想在Shiny會話中使用readRDS導入這些表。 因此,我定義了以下全局函數:

get.station <- function(sname){
  file.name <- paste(sname".rds", sep="")
  return(readRDS(file.name))
}

在服務器函數中,我定義了反應值:

st.reactive <- reactiveValues(get.station(input$station.sel))

其中input$station.sel來自用戶界面,使用selectInput(...) 這將導致以下錯誤消息:

Operation not allowed without an active reactive context. 
(You tried to do something that can only be done from inside 
a reactive expression or observer.)

如果我使用reactive()定義此函數,此錯誤消息甚至不會消失:

get.station <- reactive({
    file.name <- paste(input$station.sel".rds", sep="")
    return(readRDS(file.name))
  })

在服務器內:

st.reactive <- reactiveValues(data=get.station())

你有什么幫助嗎?

您有正確的主意,只需將函數放入reactiveobserve_函數中即可。 雖然您可以在初始調用中定義reactiveValues ,但最好的做法是將React值對象創建為空,然后使用<-標記進行所有分配。

混淆來自於這樣一個事實,盡管它的名字叫reactiveValues並不是一個反應式。 它生成一個反應性值對象,可以將反應性值存儲在其中,但是它只運行一次,並且不會檢查其值是否無效。

就您而言,我將執行以下操作:

rv <- reactiveValues()
rv$st.reactive <- observe({get.station(input$station.sel)})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM