#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?