gpt4 book ai didi

r - 如何在 Shiny 模块中使用 ShinyFiles 包 - 命名空间问题?

转载 作者:行者123 更新时间:2023-12-04 16:55:57 26 4
gpt4 key购买 nike

我在 R Shiny 的模块中使用“shinyFilesButton()”和“shinyFilesChoose()”功能时遇到问题。

我相信我的问题与在模块内有效创建新的唯一 ID 的命名空间函数(“ns()”)有关。

我应该把 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)
})
}

最佳答案

将您的模块更改为此,您的程序就可以工作了:

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)
})
}

关于r - 如何在 Shiny 模块中使用 ShinyFiles 包 - 命名空间问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com