Я хочу использовать Shiny в RMarkdown для пользователей, чтобы загружать данные (файл 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 в рабочем каталоге, а затем снова читать эти файлы.
У кого-нибудь есть хорошее предложение, как это обойти?