【发布时间】:2019-04-24 05:51:27
【问题描述】:
我想在 RMarkdown 中使用 Shiny 让用户上传数据(xlsx 文件)。
然后我想将所有工作表作为 R 数据帧(无反应性)传递以运行 RMarkdown 文件的其余部分。
我主要想将它们转换成数据帧,这样我也可以使用reticulate 来运行 Python 代码。
这个我试过了,好像不太好用:
library(dplyr)
library(miniUI)
library(shiny)
library(XLConnect)
launch_shiny <- function() {
ui <- miniPage(
gadgetTitleBar("Input Data"),
miniContentPanel(
fileInput(inputId = "my.file", label = NULL, multiple = FALSE)
)
)
server <- function(input, output, session) {
wb <- reactive({
new.file <- input$my.file
loadWorkbook(
filename = new.file$datapath,
create = FALSE,
password = NULL
)
})
observeEvent(input$done, {
stopApp(c(wb()))
})
}
runGadget(ui, server)
}
test <- launch_shiny()
df1 <- readWorksheet(object = test, sheet = "sheet1")
df2 <- readWorksheet(object = test, sheet = "sheet2")
它会抛出这个错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘readWorksheet’ for signature ‘"list", "character"’
我可以使用stopApp(readWorksheet(object = wb(), sheet = "sheet1")) 一次返回一张工作表,但我似乎无法同时返回整个工作簿或多个数据框。
我真的不想在 xlsx 中读取,将每个工作表保存为工作目录中的 csv,然后再次读取这些文件。
有人对如何解决这个问题有好的建议吗?
【问题讨论】:
标签: r shiny r-markdown