2015-07-07 2 views
0

My Shiny script получает входные данные из выпадающего списка. Исходя из этого, я установил (на стороне сервера) определенную строку (в реактивной), которая должна отображаться на диаграмме (например, как заголовок оси x). Это работает только в том случае, если строка не содержит пробелов, но ни одна строка не отображается на диаграмме, если содержит пробелы.Блестящий: Передача текста с пространством на диаграмму не работает, но он работает без пробела

Как я могу заставить его принять любую строку?

Вот мой код (я изменил один из примера из блестящого учебника, чтобы сохранить его как можно более простым):

# server.r 
# Here the string is set depending on what was chosen by the user 
shinyServer(function(input, output, session) { 
label1_new <- reactive({ 
if (input$variable1=="pp_pmw") {label1_new <- "PP pmw"} 
if (input$variable1=="perc_pp*100") {label1_new <- "PP percent"} 
if (input$variable1=="formality") {label1_new <- "Formality"} 
}) 

label1_new2 <- renderText({label1_new()}) 

output$distPlot <- renderPlot({ 
x <- faithful[, 2] # Old Faithful Geyser data 
bins <- seq(min(x), max(x), length.out = input$bins + 1) 

# draw the histogram with the specified number of bins 
# xlabel1_new2() contains the string from above 
hist(x, breaks = bins, col = 'darkgray', border = 'white', xlab=label1_new2()) 
}) 

}) 


# ui.r 
library(shiny) 


shinyUI(fluidPage(

# Application title 
titlePanel("Hello Shiny!"), 

# Sidebar with a slider input for the number of bins 
sidebarLayout(
sidebarPanel(
    selectInput("variable1", "Circle size:", 
      list("PP pmw" = "pp_pmw", 
       "PP percent" = "perc_pp*100", 
       "Formality" = "formality")), 

    sliderInput("bins", 
       "Number of bins:", 
       min = 1, 
       max = 50, 
       value = 30) 
), 

# Show a plot of the generated distribution 
mainPanel(
    plotOutput("distPlot") 
) 
) 
)) 
+0

ни один из вариантов не работает для меня этот пример – hedgedandlevered

ответ

1

renderText предназначен для использования с ui.r, а не для создания строк, которые будут использоваться в server.r

# server.r 
# Here the string is set depending on what was chosen by the user 
shinyServer(function(input, output, session) { 
label1_new <- reactive({ 
    if (input$variable1=="pp_pmw") return("PP pmw") 
    if (input$variable1=="perc_pp*100") return("PP percent") 
    if (input$variable1=="formality") return("Formality") 
}) 


output$distPlot <- renderPlot({ 
    x <- as.numeric(unlist(faithful[, 2])) # Old Faithful Geyser data 
    bins <- seq(min(x), max(x), length.out = input$bins + 1) 

    # draw the histogram with the specified number of bins 
    hist(x, breaks = bins, col = 'darkgray', border = 'white', xlab=label1_new()) 
}) 

}) 

(тот же ui.r)

+0

Спасибо так много! Что помогло добавить «сервер» в «shinyServer» (функция (ввод, вывод) »и использовать« return »в функции (« renderText »может быть излишним, как вы говорите, но я не думаю, что это был источник ошибка). – Robert

+0

whoops, я думал, что вы просто пропустили shinyServer() в примере, потому что вы не копировали все это. Поэтому я отредактировал ваш пост, он отсутствовал в исходной программе, у вас были уже закрывающие фигурные скобки. .. Кроме того, renderText был источником вашей ошибки. Ваша функция имеет тот же эффект, что и возвращаемые, но ее просто немного запутывает в вашем случае, потому что она возвращает значение побочного эффекта назначения, а не возвращает его напрямую. То же самое. Проверьте код, стоящий за renderText, и не возвращайте строку, которая вам нужна. – hedgedandlevered

+0

Вы правы, shinyServer() отсутствовал в коде, который я изначально опубликовал. Но это было только потому, что я пропустил его,копируя код, на моем компьютере у меня на самом деле был «shinyServer (функция (вход, выход)». – Robert

Смежные вопросы