[英]How to get R shiny to download the data from my renderDataTable function?
因此,我一直很難嘗試在我的renderDataTable
函數中獲取數據以與downloadHandler
函數一起使用。 所以我遇到的問題是,當我運行閃亮的應用程序時,點擊過濾器選項的復選框,選擇變量性別 0(女性),然后下載數據,我得到了過濾數據的所有觀察結果。
樣本數據:
"","age","sex","bmi","children","smoker","region","expenses"
"1",19,"0",27.9,0,"1","0",16884.92
"2",18,"1",33.8,1,"0","1",1725.55
"3",28,"1",33,3,"0","1",4449.46
"4",33,"1",22.7,0,"0","2",21984.47
"5",32,"1",28.9,0,"0","2",3866.86
"6",31,"0",25.7,0,"0","1",3756.62
"7",46,"0",33.4,1,"0","1",8240.59
"8",37,"0",27.7,3,"0","2",7281.51
"9",37,"1",29.8,2,"0","3",6406.41
"10",60,"0",25.8,0,"0","2",28923.14
"11",25,"1",26.2,0,"0","3",2721.32
"12",62,"0",26.3,0,"1","1",27808.73
"13",23,"1",34.4,0,"0","0",1826.84
"14",56,"0",39.8,0,"0","1",11090.72
"15",27,"1",42.1,0,"1","1",39611.76
"16",19,"1",24.6,1,"0","0",1837.24
"17",52,"0",30.8,1,"0","3",10797.34
"18",23,"1",23.8,0,"0","3",2395.17
"19",56,"1",40.3,0,"0","0",10602.39
"20",30,"1",35.3,0,"1","0",36837.47
用戶界面:
tabItem(tabName = "data",
h2("Insurance Data Page"),
checkboxInput("dataset","Filter option:"),
conditionalPanel(
condition = "input.dataset==true",
selectInput("sex", "Variable sex:", levels(insurance_data_update$sex))
),
dataTableOutput("data_read"),
downloadButton("data_saved","Download this data")
),
服務器.R :
#Filtering factor columns
getData <- reactive({
newData <- insurance_data_update #%>% filter(sex == input$sex)#, smoker==input$smoker, region==input$region)
})
# Reading in the data
output$data_read = renderDataTable({
#newData <- getData()
if(input$dataset==TRUE){
if(input$sex==0){
#newData <- newData %>% filter(sex==input$sex)
getData() %>% filter(sex==input$sex)
getData()
#newData
}else{
#newData <- newData %>% filter(sex==input$sex)
#newData
getData() %>% filter(sex==input$sex)
getData()
}
}else{
#newData
getData()
}
output$data_saved = downloadHandler(
filename="insurance.csv",
content = function(file){
write.csv(getData(), file)
}
)
我不完全確定我做錯了什么。
任何幫助是極大的贊賞。
創建一個新的反應式元素,它只顯示您的表格數據,然后將其用於表格和下載。 例如
#Filtering factor columns
getData <- reactive({
insurance_data_update
})
tableData <- reactive({
if(input$dataset==TRUE){
if(input$sex==0){
getData() %>% filter(sex==input$sex)
} else {
getData() %>% filter(sex==input$sex)
}
}else{
getData()
}
})
output$data_read = renderDataTable({
tableData()
})
output$data_saved = downloadHandler(
filename="insurance.csv",
content = function(file){
write.csv(tableData(), file)
}
)
我認為這應該有效。
編輯:可以從數據表中獲取不同的輸入,這將導出數據( getData()
),因為它出現在數據表中 - 這意味着您在表上所做的任何過濾都將反映以及對數據執行的過濾喂給DT
。 數據表的輸出output$data_read
是輸入值data_read_rows_all
,它基本上是DT 輸出名稱+ _rows_all
。
output$data_saved = downloadHandler(
filename="insurance.csv",
content = function(file){
write.csv(getData()[input[["data_read_rows_all"]], ], file)
}
在這里查看更多信息!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.