您好我正在尝试创建一个允许一次重命名多个文件的闪亮应用。我想我的问题是如何调用服务器中的一个函数来更改指定目录中文件的名称。
library(shiny)
ui <- fluidPage(
titlePanel("Rename Multiuple files"),
sidebarLayout(
sidebarPanel(
textInput("input_dir", label = "Choose Input Directory"),
textInput("search_pattern", label = "Choose a search pattern"),
textInput("replacement", label = "Choose a replacement pattern"),
submitButton('Submit')
),
mainPanel(
h4("You're directory"),
textOutput("directory"),
textOutput("search_pattern")
)
)
)
rename.files = function(input_dir, search_pattern, replacement){
filez = list.files(input_dir, pattern = search_pattern )
sapply(filez,FUN=function(eachPath){
file.rename(from=eachPath,to=sub(pattern = search_pattern,
replacement = replacement,eachPath))})
}
server <- function(input, output, session) {
output$directory = renderText({input$input_dir})
output$search_pattern = renderText({input$search_pattern})
output$replacement = renderText({input$replacement})
reactive(rename.files(input$input_dir,input$search_pattern,input$replacement))
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:3)
这是一种可以指向正确方向的可能性。请注意,我使用shinyDirPicker
中的shinyFiles
来获取用户的目录。
希望这有帮助!
library(shiny)
library(shinyFiles)
ui <- fluidPage(
titlePanel("Rename Multiple files"),
sidebarLayout(
sidebarPanel(
shinyDirButton('directory','Select Directory:','Select Directory:'),
textInput("search_pattern", label = "Choose a search pattern"),
textInput("replacement", label = "Choose a replacement pattern"),
actionButton('submit','Submit')
),
mainPanel(
h4("Your directory"),
textOutput("directory"),
textOutput("search_pattern")
)
)
)
server <- function(input, output, session) {
shinyDirChoose(input,'directory',roots=c(wd='.'))
observeEvent(input$submit,{
directory = parseDirPath(roots = c(wd='.'), input$directory)
myfiles = list.files(directory)
new_names = gsub(input$search_pattern,input$replacement,myfiles)
file.rename(paste0(directory,'/',myfiles),paste0(directory,'/',new_names))
})
}
shinyApp(ui = ui, server = server)