我已经完成了一个程序来转换一个excel文件,这个文件完全独立地工作。我遇到的问题是我试图将它包含在一个闪亮的应用程序中,以便与其他人分享。目标是上传一个与特定模板相对应的excel文件并下载转换结果。
我收到错误,我不明白。
这是我的代码:
library(shiny)
library(readxl)
library(stringr)
transformFile <- function(df1, df2){
for(i in seq(1, nrow(df1))){
element1 <- as.character(df1$Operations[i]);
for(j in seq(1, nrow(df2))){
element2 <- as.character(df2$MotsARechercher[j]);
if(str_detect(element1, ignore.case(element2))){
df1$TypeOperations[i] <- as.character(df2$TypeOperations[j]);
}
}
}
return(df1)
}
ui <- fluidPage(
titlePanel("Use readxl"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose xlsx file',
accept = c(".xlsx"),
downloadButton('file2', "Download modified file")
)
),
mainPanel(
tableOutput('contents'))
)
)
server <- function(input, output){
output$contents <- renderTable({
inFile <- input$file1
if(is.null(inFile))
return(NULL)
file.rename(inFile$datapath,
paste(inFile$datapath, ".xlsx", sep=""))
read_excel(paste(inFile$datapath, ".xlsx", sep=""), 1)
})
output$downloadData <- downloadHandler(
filename = function() {
paste("comptesAvecLibellesOpe.xlsx")
},
content = function(file) {
infile <- input$file1
df1 <- read_excel(paste(infile$datapath, ".xlsx", sep = ""), 1)
df2 <- read_excel(paste(infile$datapath, ".xlsx", sep = ""), 2)
write.csv(transformFile(df1, df2), file, row.names = FALSE)
}
)
}
shinyApp(ui, server)
这就是错误:
if(multiple)inputTag $ attribs $ multiple&lt; - “multiple”时出错: 论证不能被解释为合乎逻辑的 另外:警告信息: if if(multiple)inputTag $ attribs $ multiple&lt; - “multiple”: 条件的长度> 1,只使用第一个元素
提前感谢您的帮助。
答案 0 :(得分:2)
您将downloadButton()
置于您的界面定义中fileInput()
。
fileInput('file1', 'Choose xlsx file',
accept = c(".xlsx"),
downloadButton('file2', "Download modified file")
)
这可以解决您的错误
ui <- fluidPage(
titlePanel("Use readxl"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose xlsx file',
accept = c(".xlsx")),
downloadButton('file2', "Download modified file")
),
mainPanel(
tableOutput('contents'))
)
)