我试着创建一个闪亮的应用程序,在其中可以从不同的dfs中选择。然后可以编辑表中的值。最后我想下载编辑后的表。
每一步都是自己的,编辑和下载,选择和下载都没有问题。所有这三个一起:极度绝望。
我似乎不明白闪亮是如何更新React值的,以及你如何用隔离物切断它。
library(shiny)
library(DT)
ui <- fluidPage(
# App title ----
titlePanel("Downloading Data"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Choose dataset ----
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "pressure", "cars"), multiple=T),
actionButton(inputId = "goButton",
label = "Run Report"),
# downloadbutton
downloadButton("downloadData", "Download")
),
# Main panel for displaying outputs ----
mainPanel(
DTOutput("x1")
)
)
)
#df <- cars #if this is taken instead of the first "eventReactive" it works
server <- function(input, output) {
eventReactive({
# Take a dependency on input$goButton
input$goButton
# Use isolate() to avoid dependency on input$obs
df <- isolate(input$dataset)
})
#render the editable DT
output[["x1"]] <- renderDT({
datatable(
df,
selection = "single",
editable = TRUE
)
})
# Creating a DF with the edited info
aniRoi2 <- reactiveVal(df)
#Creating proxy
proxy <- dataTableProxy("x1")
#storing edited df in proxy
observeEvent(input[["x1_cell_edit"]], {
info <- input[["x1_cell_edit"]]
newAniroi2 <-
editData(aniRoi2(), info, proxy, rownames = TRUE, resetPaging = FALSE)
aniRoi2(newAniroi2)
saveRDS(newAniroi2, "data_entry_form.rds") # save rds
})
#download the proxy
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(aniRoi2(), file)
}
)
}
shinyApp(ui, server)
在这里我尝试选择一个数据集,它只能通过按下一个按钮来加载。然后它应该像一个普通的数据。帧或tibble。
如果我排除选择 Dataframe 的可能性,并在“ui”和“server”之间调用“df〈-汽车”,那么它将按预期工作。
到目前为止,我收到错误消息:正在侦听http://127.0.0.1:4060警告:is_quosure中的错误:参数“表达式”错误(无标准)52:是引用51:预期目标50:事件React性49:服务器[#2] 3:运行应用程序2:打印.光泽.appobj 1:is_quosure(表达式)中出错:参数“表达式”错误(无标准)
非常感谢,任何帮助都将不胜感激。感觉好像我离得很近(但一周以来就是这样的感觉)。
我也尝试过download edited data table gives warning in shiny app,它使用observe来 Package 选择,但在shiny-app中我得到了熟悉的“错误'数据'必须是二维的(例如,数据框或矩阵)”
附言:如果你不介意的话,还有一个额外的问题:你如何调试shiny?我的意思是你怎么能看到里面发生了什么,环境看起来怎么样,哪些进程在工作?
1条答案
按热度按时间5vf7fwbs1#
您的代码有一些问题。首先,
input$dataset
是一个字符串,包含所选数据集的名称,而不是数据集本身。要获取数据集,请使用例如get(input$dataset)
。其次,您使用eventReactive
的方式很有趣。(;总的来说,我会选择一个observeEvent
来初始化你的reactiveVal
aniRoi2
,用选择的数据集。最后,我在你的selectInput
中设置了multiple=FALSE
,因为选择多个df会破坏你的代码,允许用户选择多个df对我来说毫无意义。(我猜你这样做是为了去掉预先选择的值??)