我有一个R shiny应用程序,我在R studio中编写了独立的ui.R,server.R,global.R和一个www文件夹,其中有一些图片。该应用程序所做的是显示其全局.R文件中指定的目录中的图像。图像具有允许用户选择图像的复选框。一旦用户选择他们的图片并按下称为“创建”的操作按钮,应用程序将创建2个文本文件,列出应用程序目录中用户选择和未选择的图像的文件名。
现在,我真正需要帮助的是两件事:
1.我不想在全局.R文件中指定images目录和项目名称,我想让我的应用程序接受来自用户的参数,也就是说,我想让用户在运行应用程序时以某种方式指定images目录和项目名称(稍后在创建文本文件时使用的名称)。理想情况下,我想让我的global.R文件为空,其中没有代码。这可能吗?我的一个朋友建议我可以使用一个叫做ShinyOptions和getShinyOtion的东西,但我和他都不熟悉这个。
1.如果我要从我的计算机的命令行(终端)(而不是Rstudio中的终端)运行应用程序,我需要做什么?
所以,如果任何人有一个想法使用这些或其他人将非常感谢他们的帮助。
为了帮助重现我的案例,下面我包括了我目前在ui.R、server.R和global. R中的代码。
UI
library(shiny)
library(shinydashboard)
dashboardPage(
dashboardHeader(title = "Pictures List"),
dashboardSidebar(
actionButton("the_action_button", "Create", width = "100%")
),
dashboardBody(
fluidRow(
box(
title = "Picture Selection",
width = 12,
uiOutput("image_selection")
)
)
)
)
服务器
library(shiny)
library(shinydashboard)
function(input, output, session) {
# Get a list of available image files from the specified folder
image_files <- list.files(image_folder, pattern = "\\.png$", full.names = FALSE)
# Initialize a list to store selected images
selected_images <- reactiveVal(character(0))
# Render UI for image selection
output$image_selection <- renderUI({
tagList(
lapply(image_files, function(img) {
img_tag <- tags$img(src = img, width = "100%")
checkbox_tag <- checkboxInput(
inputId = img,
label = NULL,
value = img %in% selected_images()
)
div(img_tag, checkbox_tag)
})
)
})
# Create and download text files based on selected images
observeEvent(input$the_action_button, {
# Create a timestamp for the filenames
timestamp <- format(Sys.time(), format = "%Y%m%d")
# Create text file for images not selected
not_selected_images <- setdiff(image_files, selected_images())
not_selected_filename <- paste0("not_selected_file_", project_name,
"_", timestamp, ".txt")
writeLines(not_selected_images, con = not_selected_filename)
# Create text file for selected images
selected_images <- selected_images()
selected_filename <- paste0("selected_file_list_", project_name,
"_", timestamp, ".txt")
writeLines(selected_images, con = selected_filename)
})
}
全球
image_folder <- "~/Desktop/pictures_folder"
project_name <- "land_project"
2条答案
按热度按时间oyt4ldly1#
因此,这实际上是Saving R Shiny app as a function with arguments passed to the shiny app的副本,您使用
shinyOptions
是正确的,但现在我已经弄清楚了:你需要用一个调用
shiny::runApp
的函数来启动这个应用程序(为了找到服务器和用户界面,你传递这个函数有很多选项)。然后在服务器中添加这个(我只在main函数之外尝试过,但如果它在内部也没关系):
然后启动应用程序用途:
busg9geu2#
使用Shiny的textInput和fileInput小部件,允许用户在运行应用程序时指定图像目录和项目名称:
库(shinydashboard)
Jmeter 板页面(dashboardHeader(title =“图片列表”),dashboardSidebar(textInput(“image_directory”,“Image Directory”,placeholder =“Enter directory path”),textInput(“project_name”,“项目名称”,placeholder =“输入项目名称”),actionButton(“the_action_button”,“Create”,width =“100%”)),dashboardBody(fluidRow(box(title =“Picture Selection”,width = 12,uiOutput(“image_selection”)
更新server.R以使用这些输入: