Как объединить список строк в shiny?

#r #shiny #concatenation

#r #блестящий #объединение

Вопрос:

Я хотел бы сгенерировать список строк на основе пользовательского ввода. Но когда я использую функцию вставки, я получаю эту ошибку: object 'b' not found

Я ищу способ вернуть все входные значения для дальнейшего отображения или использования на сервере как —

например:

 LV =~ x1   x2   x3
LV ~ LV1
  

и так далее.

Возможно, мне нужно сохранить введенные пользователем значения как реактивные значения. Но я не уверен, как это сделать.

Вот полный код:

 library(shiny)

newlist <- as.list(c("LV", "LV2", "x1", "x2", "x3", "x4", "x5", "x6"))

lvar <- function(...) {
    params <- list(...)
    stopifnot(length(params)%%2==0)
    lefts = params[seq(1,length(params), by=2)]
    rights = params[seq(2,length(params), by=2)]
    rights <- Map(paste, rights, collapse=" ")
    paste(paste0(lefts, " =~", rights), collapse="n")
}

regs <- function(...) {
    params <- list(...)
    stopifnot(length(params)%%2==0)
    lefts = params[seq(1,length(params), by=2)]
    rights = params[seq(2,length(params), by=2)]
    rights <- Map(paste, rights, collapse=" ")
    paste(paste0(lefts, "~", rights), collapse="n")
}


ui <- fluidPage(

    sidebarLayout(
        sidebarPanel(
            selectInput("variable1", "Variable:", choices = c(' ', newlist), selected = NULL),
            selectInput("variable2", "Variable:", choices = c(' ', newlist), selected = NULL, multiple = TRUE),
            selectInput("variable3", "Variable:", choices = c(' ', newlist), selected = NULL),
            selectInput("variable4", "Variable:", choices = c(' ', newlist), selected = NULL, multiple = TRUE)
        ),

        mainPanel(
            verbatimTextOutput("listout1"),
            verbatimTextOutput("listout2"),
            verbatimTextOutput("listout3"),
            verbatimTextOutput("listout4"),
            verbatimTextOutput("listout5")
        )
    )
)

server <- function(input, output) {
    
    output$listout1 <- renderText({
        input$variable1
        })
    
    output$listout2 <- renderText({
        input$variable2
        })
    
    output$listout3 <- renderText({
         a <- lvar(lefts = input$variable1, rights = input$variable2)
         })
    
    output$listout4 <- renderText({
         b <- regs(lefts = input$variable3, rights = input$variable4)
         })
    
    output$listout5 <- renderText({
         paste(a, b, sep = "/n")
         })
}
shinyApp(ui = ui, server = server)
  

Ответ №1:

a и b назначения переменных внутри renderText недоступны для других функций на сервере.
Попробуйте:

 library(shiny)

newlist <- as.list(c("LV", "LV2", "x1", "x2", "x3", "x4", "x5", "x6"))

lvar <- function(...) {
  params <- list(...)
  stopifnot(length(params)%%2==0)
  lefts = params[seq(1,length(params), by=2)]
  rights = params[seq(2,length(params), by=2)]
  rights <- Map(paste, rights, collapse=" ")
  paste(paste0(lefts, " =~", rights), collapse="n")
}

regs <- function(...) {
  params <- list(...)
  stopifnot(length(params)%%2==0)
  lefts = params[seq(1,length(params), by=2)]
  rights = params[seq(2,length(params), by=2)]
  rights <- Map(paste, rights, collapse=" ")
  paste(paste0(lefts, "~", rights), collapse="n")
}


ui <- fluidPage(
  
  sidebarLayout(
    sidebarPanel(
      selectInput("variable1", "Variable:", choices = c(' ', newlist), selected = NULL),
      selectInput("variable2", "Variable:", choices = c(' ', newlist), selected = NULL, multiple = TRUE),
      selectInput("variable3", "Variable:", choices = c(' ', newlist), selected = NULL),
      selectInput("variable4", "Variable:", choices = c(' ', newlist), selected = NULL, multiple = TRUE)
    ),
    
    mainPanel(
      verbatimTextOutput("listout1"),
      verbatimTextOutput("listout2"),
      verbatimTextOutput("listout3"),
      verbatimTextOutput("listout4"),
      verbatimTextOutput("listout5")
    )
  )
)

server <- function(input, output) {
  
  output$listout1 <- renderText({
    input$variable1
  })
  
  output$listout2 <- renderText({
    input$variable2
  })
  
  output$listout3 <- renderText({
    #a <- 
    lvar(lefts = input$variable1, rights = input$variable2)
  })
  
  output$listout4 <- renderText({
    #b <-
    regs(lefts = input$variable3, rights = input$variable4)
  })
  
  output$listout5 <- renderText({
    paste(lvar(lefts = input$variable1, rights = input$variable2), regs(lefts = input$variable3, rights = input$variable4), sep = "n") # changed /n to n
  })
}
shinyApp(ui = ui, server = server)
  

Если вы хотите, чтобы a и b были доступны для других функций, вам следует использовать реактивные значения.

Комментарии:

1. Есть ли способ отображать текст отдельными строками? /n Просто распечатывается. Вместо этого я хотел бы видеть выходные данные в отдельных строках. Я пытался writeLines , но он печатался в консоли вместо приложения.

2. Вы пробовали n вместо /n?