如何解决带保存按钮的R发光模块
我正在设置一个模块,目的是在同一应用程序的不同选项卡中具有两个数据表。 我希望能够分别编辑和保存每个表。 在我的代码中,只有第一个“保存”按钮有效,并且它保存了两个数据表。
理想情况下,每个保存按钮都应该起作用,并且只保存相应的表。
重要提示:我使用的是DTedit的修改版:
devtools::install_github('DavidPatShuiFong/DTedit@2.2.1')
这是我有问题的代码:
library(shiny)
library(DTedit)
myModuleUI <- function(id,nam) {
ns <- shiny::NS(id)
shiny::tagList(
br(),##### needs corrections!!
tabsetPanel(tabPanel("XXX",dteditmodUI(ns(nam)),actionButton(ns("reset"),"Reset to Saved",styleclass = "warning"),actionButton(ns("saveBtn"),label = "save"),br(),id=ns('tabset'),type = 'tabs')
)
)
####
}
myModule <- function(input,output,session,df,nam,taby,wb) {
dfr=reactiveVal()
dfr(df)
Grocery_List_Results <- shiny::callModule(
dteditmod,id = nam,thedata =dfr)
# ### save part
savd = data.frame(isolate(dfr()))
observeEvent(input$saveBtn,{
print("Q")
## Add worksheets
st = paste(taby,as.character(unclass(Sys.time())),sep="_")
addWorksheet(wb,st)
writeData(x = Grocery_List_Results$thedata,wb = wb,sheet = st)
saveWorkbook(wb,"wb.xlsx",overwrite = T)
savd <<- Grocery_List_Results$thedata
shinyalert(title = "Saved!",type = "success")
})
observeEvent(input$reset,{
dfr(savd)
print(dfr)
shinyalert(title = "Reset to saved data!",type = "info")
})
}
########
ui <- fluidPage(
h3('Grocery List'),myModuleUI('myModule1',nam="groc"),nam="groc2")
)
server <- function(input,session) {
df= data.frame(
Buy = c('Tea','Biscuits','Apples',"Tea","Apples"),Quantity = c(7,2,5,9,44),stringsAsFactors = FALSE
)
file = "AICs.xlsx"
wb <- loadWorkbook(file)
shiny::callModule(myModule,'myModule1',nam="groc",df=df,taby="Tea",wb)
shiny::callModule(myModule,nam="groc2",taby="Apples",wb)
}
shinyApp(ui = ui,server = server)
感谢您的时间!
解决方法
终于, 多亏了thread, 我设法解决了这个问题 似乎 :
library( "openxlsx" )
library("shiny" )
library(shinyalert)
library(shinysky)
library(DTedit) ## used the modified version from https://github.com/DavidPatShuiFong/DTedit
#installed with devtools::install_github('DavidPatShuiFong/DTedit@2.2.1')
results_2_UI <- function(id,nam) {
useShinyalert()
ns <- NS(id)
tabPanel(
title = "Export1",dteditmodUI(ns(nam)),actionButton(ns("reset"),"Reset to Saved",styleclass = "warning"),actionButton(ns("saveBtn"),label = "save")
)
}
results_3_UI <- function(id,nam) {
useShinyalert()
ns <- NS(id)
tabPanel(
title = "Export2",label = "save")
)
}
results <- function(input,output,session,df,nam,taby,wb) {
## do some complicated data transformations
dfr=reactiveVal()
dfr(df)
Grocery_List_Results <- shiny::callModule(
dteditmod,id = nam,thedata =dfr)
# ### save part
savd = data.frame(isolate(dfr()))
observeEvent(input$saveBtn,{
print("Q")
## Add worksheets
st = paste(taby,as.character(unclass(Sys.time())),sep="_")
addWorksheet(wb,st)
writeData(x = Grocery_List_Results$thedata,wb = wb,sheet = st)
saveWorkbook(wb,"wb.xlsx",overwrite = T)
savd <<- Grocery_List_Results$thedata
shinyalert :: shinyalert(title = "Saved!",type = "success")
})
observeEvent(input$reset,{
dfr(savd)
print(dfr)
shinyalert::shinyalert(title = "Reset to saved data!",type = "info")
})
}
### module end
ui <- fluidPage(
tabsetPanel(
id = "tabs",# results_1_UI(id = "test1"),results_2_UI(id = "test2",nam="groc"),results_3_UI(id = "test3",nam="groc2")
)
)
server <- function(input,session) {
df= data.frame(
Buy = c('Tea','Biscuits','Apples',"Tea","Apples"),Quantity = c(7,2,5,9,44),stringsAsFactors = FALSE
)
file = "AICs.xlsx"
wb <- loadWorkbook(file)
callModule(
module = results,id = "test2",nam="groc",df=df,taby="groc",wb=wb
)
callModule(
module = results,id = "test3",nam="groc2",taby="groc2",wb=wb
)
}
shinyApp(ui = ui,server = server)
手指交叉,没关系!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。