【发布时间】:2019-05-15 02:00:50
【问题描述】:
我正在尝试编辑我使用 fileInput 上传的数据框 yjay 中的列,但是我不断收到错误消息“在没有活动的反应性上下文的情况下不允许操作。(您尝试做一些只能从反应性内部完成的事情)表达或观察者。)”。有人知道我为什么会收到这个错误吗?任何帮助都非常学徒!
server = function(input, output) {
a1 = reactive({
if(is.null(input$myFile$datapath)) NULL
else{
read_excel(input$myFile$datapath)
}
})
x <- as.POSIXct(a1()$Month)
a1()$mo <- strftime(x, "%m")
a1()$yr <- strftime(x, "%Y")
a1()$qrt <- quarter(x, with_year = FALSE, fiscal_start = 01)
#subsetting data to display sales reps that hold a quota
newdata <- a1()[grepl("Y", a1()$`Quota Held Flag`),]
#fixing participation column into categorical for donut chart
newdata$Participation[is.na(newdata$Participation)] <- 0
newdata$Participation <- factor(newdata$Participation, labels =
c("0-99%","100%"))
#grouping data
newdata2 <- newdata %>%
group_by(yr, mo, qrt)
}
shinyApp(ui = ui, server = server)
【问题讨论】:
-
您需要在响应式环境中调用
a1()。您希望所有代码何时运行设置mo、yr和qrt值?我认为这需要在myFile更新的任何时候发生。您可以将这些转换移动到a1反应值中,或者创建一个新的反应值,例如依赖于a1的newdata。如果您是 Shiny 的新手,可以查看 these videos 以了解响应式编程的基础知识。 -
感谢您对@MrFlick 的帮助!我对闪亮还是很陌生,所以我无法理解你在反应环境中调用 a1() 的意思。你认为你可以举一个简短的例子吗?另外,我很欣赏视频链接,肯定会在圣诞假期深入了解这些链接。
-
@JohnPaul 你是说使用 a1 = reactiveDataInput 而不仅仅是反应式?
-
我想我的想法是,一旦您阅读了 a1,就不要尝试更改它。相反,根据 a1 和 mo、yr 和 qrt 作为列的更改创建一些新的响应式 data.frame。
标签: r shiny shinydashboard shiny-reactivity