我在使用" shinyFilesButton()"时遇到了问题。和" shinyFilesChoose()" R闪亮模块中的功能。
我认为我的问题与命名空间函数(" ns()")有关,它们在模块中有效地创建了新的,唯一的ID。
我在哪里将ns()调用放在shinyFiles函数中?如何在服务器端处理此问题?
我嘲笑了一个例子,代码如下所示。该应用程序只选择一个文件,并告诉您有关所选内容的信息。 请注意,目前没有任何ns()调用与任何shinyFiles函数一起使用。 (我已经尝试在ns()中包装shinyFilesButton()的id,但是它与shinyFileChoose不匹配。)
目前,下面的这个应用程序将显示我的文件,但只显示在根目录中。我无法深入研究其他目录。此外,选择按钮将突出显示,但使用时不会发生任何事情。
修改:我根据评论中的建议尝试使用命名空间来更新代码。我在shinyFilesButton()调用(ui端)中使用ns()函数,而在服务器端没有任何内容。
现在,在使用文件选择器时,我无法看到任何文件。
任何帮助?
以下是app.r文件的代码:
#App.R
#Demonstrate issues with ShinyFiles and namesspaces in modules
library(shiny)
library(shinyFiles)
source("shinyFiles_module.R")
server <- function(input, output, session) {
#module Way
callModule(sample,
id="testid",
root_dirs=c(root_on_mac="/Users/Ryan/Desktop/"))
}
ui <- fluidPage(
tagList(
h2("Module Way"),
sample_UI(id = "testid",
label = "shiny file test")
)
)
shinyApp(ui = ui, server = server)
对于模块:
#Sample shinyFiles Module
#trying to get File path using ShinyFiles within a Module
library(shiny)
library(shinyFiles)
#Settings UI function:
# Module UI function
sample_UI <- function(id, label = "Shiny file test") {
# Create a namespace function using the provided id
ns <- NS(id)
#begin UI (wrap all input/ouput in ns() call)
tagList(
strong("Selected Location: "), verbatimTextOutput(ns("file_path")),
shinyFilesButton(
id=ns("get_file_path"),
label="Click Here to Select",
title="Select a file",
multiple= FALSE,
buttonType = "default",
class = NULL)
)
}
# Module server function
sample <- function(input,
output,
session,
root_dirs,
id_value) {
shinyFileChoose(input, id="get_file_path", roots=root_dirs, session=session)
output$file_path <- renderPrint({
parseFilePaths(roots=root_dirs, input$get_file_path)
})
}
答案 0 :(得分:1)
将模块更改为此模块,您的程序可以正常运行:
library(shiny)
library(shinyFiles)
#Settings UI function:
# Module UI function
sample_UI <- function(id, label = "Shiny file test") {
# Create a namespace function using the provided id
ns <- NS(id)
#begin UI (wrap all input/ouput in ns() call)
tagList(
strong("Selected Location: "), verbatimTextOutput(ns("file_path")),
shinyFilesButton(
id=ns("get_file_path"),
label="Click Here to Select",
title="Select a file",
multiple= FALSE,
buttonType = "default",
class = NULL)
)
}
# Module server function
sample <- function(input,
output,
session,
root_dirs) {
ns <- session$ns
shinyFileChoose(input, id=ns("get_file_path"), roots=root_dirs, session=session)
output$file_path <- renderPrint({
parseFilePaths(roots=root_dirs, input$get_file_path)
})
}
答案 1 :(得分:0)
我遇到了同样的问题,并且按照卡尔的建议解决了这个问题:
我正在使用R3.6.1,它可以工作。在R3.4中,导航到子文件夹时存在问题。
library(shiny)
library(shinyFiles)
#Settings UI function:
# Module UI function
sample_UI <- function(id, label = "Shiny file test") {
# Create a namespace function using the provided id
ns <- NS(id)
#begin UI (wrap all input/ouput in ns() call)
tagList(
strong("Selected Location: "), verbatimTextOutput(ns("file_path")),
shinyFilesButton(
id=ns("get_file_path"),
label="Click Here to Select",
title="Select a file",
multiple= FALSE,
buttonType = "default",
class = NULL)
)
}
# Module server function
sample <- function(input,
output,
session,
root_dirs,
id_value) {
shinyFileChoose(input, id="get_file_path", roots=root_dirs, session=session)
output$file_path <- renderPrint({
parseFilePaths(roots=root_dirs, input$get_file_path)
})
}