如何从ShinyFiles
目录按钮中仅获取选定的目录名?我看了这篇文章,另一个SO问题,得到了它来显示verbatimTextOutput
中的完整路径,但我只想要目录名。我试着像message()
和print()
一样打印到控制台。它同时打印了一些奇怪的整数。我尝试了isolate(reactiveValuesToList(base_name))
、dir()$path[[2]]
;I’我不成功。
1
[1] 1
attr(,"class")
[1] "integer" "shinyActionButtonValue"
list("", "flowCyt_pdfs")home
$path
$path[[1]]
[1] ""
$path[[2]]
[1] "flowCyt_pdfs"
$root
[1] "home"
Warning: Error in $: $ operator is invalid for atomic vectors
library(shiny)
library(shinyFiles)
ui <- fluidPage(
navbarPage(
tabPanel("test",
sidebarPanel(
tags$h2("HEADER"),
shinyDirButton("dir", "Input Directory", "")
),
mainPanel(
h4("DIRPATH OUTPUT"),
verbatimTextOutput("dirpath_dply")
)
)
)
)
server <- function(input, output) {
home_dir <- "/home/dir/path"
shinyDirChoose(
input,
"dir",
roots = c(home = home_dir),
filetypes = c('', "txt", "png", "pdf")
)
dir <- reactive(input$dir)
output$dirpath_dply <- renderText({
parseDirPath(c(home=home_dir), dir())
})
observeEvent(ignoreNULL = TRUE,
eventExpr = {
input$dir
},
handlerExpr = {
base_name <- unlist(dir())
message(base_name)
datapath <- file.path(home_dir,paste(unlist(dir()) ))
})
}
shinyApp(ui, server)
我不确定您真正期望得到什么,但以下是我的解释(为了匹配任何用户/系统,我将home_dir
更改为~
(。
注意:您不需要提供filetypes
,因为shinyDirChoose
用于选择目录,而不是文件。你的用户界面也有点奇怪。不建议在另一个...Page
中使用...Page
,因为...Page
通常是最顶层的UI元素。
dir()
将提供选定的目录基名称。在使用值之前,我会检查其真实性。
server <- function(input, output) {
home_dir <- "~"
shinyDirChoose(
input,
"dir",
roots = c(home = home_dir)
)
dir <- reactive(basename(parseDirPath(c(home=home_dir), input$dir)))
output$dirpath_dply <- renderText({
dir()
})
observe({
if(isTruthy(dir()))
message(dir())
})
}