r - 如何在闪亮编辑后下载数据表
问题描述
我在闪亮的应用程序中的数据表中有大约 20,000 张图像。我想删除我不喜欢的图像,然后下载生成的数据表(只包含我想要的图像的路径名)。
我设法看到了一个数据框,每一行都向我展示了一张图片。我可以删除我不喜欢的行。我现在希望能够将数据帧(仅使用文件的路径而不是实际图像)下载到 csv 中。我似乎无法使用 downloadHandler 执行此操作。我错过了什么?
这是我的代码:
服务器.R
library(shiny)
library(shinydashboard)
library(data.table)
library(DT)
server<-shinyServer(function(input, output) {
vals<-reactiveValues()
vals$Data<-data.table(
df
)
output$MainBody<-renderUI({
fluidPage(
box(width=12,
hr(),
column(12,dataTableOutput("Main_table")),
tags$script(HTML('$(document).on("click", "input", function () {
var checkboxes = document.getElementsByName("row_selected");
var checkboxesChecked = [];
for (var i=0; i<checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i].value);
}
}
Shiny.onInputChange("checked_rows",checkboxesChecked);
})')),
tags$script("$(document).on('click', '#Main_table button', function () {
Shiny.onInputChange('lastClickId',this.id);
Shiny.onInputChange('lastClick', Math.random())
});")
)
)
})
output$downloadData <- downloadHandler(
filename = function() {
paste(input$Main_table, ".csv", sep = "")
},
content = function(file) {
write.csv(vals$Data, file, row.names = FALSE)
}
)
output$Main_table<-renderDataTable({
DT=vals$Data
datatable(DT,
escape=F)}
)
})
用户界面
ui<-fluidPage(dashboardHeader(disable = T),
dashboardSidebar(disable = T),
downloadLink("downloadData", "Download"),
dashboardBody(uiOutput("MainBody")
)
)
# Run the application
shinyApp(ui = ui, server = server)
解决方案
问题是它df
是一个函数library(stats)
。请看?df
。请不要将df
其用作变量名——这只会引起混淆;取而代之DF
。您将此函数包装到data.table()
其中并将其传递给 a reactiveValue
(参见print()
我添加的)。
此构造被视为list()
bywrite.csv()
并且它不知道如何处理list()
导致以下错误:
write.table 中的错误:“EncodeElement”中未实现的类型“list”
因此,您可能希望通过例如传递而不是来修复data.table
初始化:NULL
df
library(shiny)
library(shinydashboard)
library(data.table)
library(DT)
server <- shinyServer(function(input, output) {
vals <- reactiveValues(myTabData = data.table(NULL))
vals$Data <- data.table(df)
print(paste("myData:", isolate(vals$Data)))
output$MainBody <- renderUI({
fluidPage(box(
width = 12,
hr(),
column(12, dataTableOutput("Main_table")),
tags$script(
HTML(
'$(document).on("click", "input", function () {
var checkboxes = document.getElementsByName("row_selected");
var checkboxesChecked = [];
for (var i=0; i<checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i].value);
}
}
Shiny.onInputChange("checked_rows",checkboxesChecked);})'
)
),
tags$script(
"$(document).on('click', '#Main_table button', function () {
Shiny.onInputChange('lastClickId',this.id);
Shiny.onInputChange('lastClick', Math.random())});"
)
))
})
output$downloadData <- downloadHandler(
filename = function() {
"Main_table.csv"
},
content = function(file) {
write.csv(vals$myTabData, file, row.names = FALSE)
# Warning: Error in write.table: unimplemented type 'list' in 'EncodeElement'
# write.csv(vals$Data, file, row.names = FALSE)
}
)
output$Main_table <- renderDataTable({
DT = vals$Data
datatable(DT, escape = FALSE)
})
})
ui <- fluidPage(
dashboardHeader(disable = T),
dashboardSidebar(disable = T),
downloadLink("downloadData", "Download"),
dashboardBody(uiOutput("MainBody"))
)
shinyApp(ui = ui, server = server)
此外,您应该修复您的文件名(input$Main_table
不存在)
推荐阅读
- ios - 在视图控制器中获取已关闭 PopupDialog 的通知
- javascript - 带有 lxml 的 Xpath 中没有元素:Javascript 生成的页面
- botframework - LUIS 模型是否有最大意图数?和/或是否有推荐的最大值?
- react-native - 在 React Native Navigation 中更改“SingleScreenApp”的主屏幕
- unit-testing - 对来自 package.json 的文件夹中的文件夹运行测试
- java - LeanFT 验证特定文本是否存在
- android - BLE:MTU 交换后降低 MTU 值大小(差异较大)
- python - 将没有唯一索引的 DataFrame 与 Python 和 Pandas 合并
- vba - 使用 Word VBA 从文件夹和子文件夹中获取 doc 文件
- routing - Mitmproxy 路由