在reactiveValue() 函数中使用反应输入

时间:2021-04-12 03:36:55

标签: r shiny

我是闪亮的新手,并试图找出一些反应性的东西。

目前这适用于静态 csv。

## function to return random row from twitter csv
 tweetData <- read.csv('twitterData1.csv')


## stores reactive values 
appVals <- reactiveValues(
    tweet =  tweetData[sample(nrow(tweetData), 1), ],
    ratings = data.frame(tweet = character(), screen_name = character(), rating = character())
    )

我需要相同的反应值块作为函数,但使用 input$file 使用选定的 csv。

appVals <- reactiveValues(
    csvName <- paste0('../path/', input$file),
    tweetData <- read.csv(csvName),
    tweet =  tweetData[sample(nrow(tweetData), 1), ],
    ratings = data.frame(tweet = character(), screen_name = character(), rating = character())
    )

我收到错误:

Warning: Error in : Can't access reactive value 'file' outside of reactive consumer.

我试过移动东西,但总是卡住,感谢帮助!

1 个答案:

答案 0 :(得分:1)

错误提示您应该更新反应式表达式中的值。

首先初始化反应值:

tweetData <- read.csv('twitterData1.csv')

appVals <- reactiveValues()
appVals$tweet <-  tweetData[sample(nrow(tweetData), 1), ]
appVals$ratings <- data.frame(tweet = character(), screen_name = character())

然后用反应式更新它们:

observeEvent(input$file,{
    csvName <- paste0('../path/', input$file)
    if (file.exists(csvName) {
      tweetData <- read.csv(csvName)
      appVals$tweet =  tweetData[sample(nrow(tweetData), 1), ]
      appVals$ratings = data.frame(tweet = character(), screen_name = character(), rating = character())
     }
    })