将字符串变量传递给Shiny

时间:2017-02-03 11:37:13

标签: r shiny

我有一个简单的Shiny应用程序,可以绘制一些数据。该应用程序运行一个函数,接受5个参数并绘制结果。

4个参数通过滑块传递,它们都工作正常,但第5个参数是文本字符串。

从我的用户界面剪辑:

selectInput("subsec", "Subsections",
                       c("Pies", "Milk", "Salad", "Bread"),
                         selected = TRUE, multiple = FALSE,
                         selectize=FALSE)

其中' subsec'是我想传递给我的函数的变量。

从我的服务器剪断:

Price_Score(input$s_ranks[1], input$s_ranks[2], 
input$s_index[1], input$s_index[2], input$subsec[1])

这似乎不起作用,没有任何情节,但如果我手动输入文字字符串如下,它可以正常工作

Price_Score(input$s_ranks[1], input$s_ranks[2], 
input$s_index[1], input$s_index[2], Milk)

如何将字符串传递过来?

在我的R函数中我确实将变量的大小写改为小写

sect <- tolower(deparse(substitute(sect)))

下拉列表中的某些说明也包含空格,例如太空侵略者。如何将带空格的字符串传递给我的函数?

在我的函数中,我有一些代码根据4个数字参数操作数据,第5个参数是字符串,过滤图表的数据表。绘制图表的代码如下:

        plot <- (ggplot(data, aes(rank, Move_Curve)) + 
        geom_line(size = 2, color = "blue") +
        scale_y_continuous(breaks = seq(0, x_axis_max + x_axis_incriment, x_axis_incriment)) +
        scale_x_continuous(breaks = seq(0, 20000 + 2000, 500)) + 
        geom_point(data = data[section_lower == sect 
                               & `Price Index` > 0, .(rank, `Price Index`)], aes(y = `Price Index`)) +
        labs(title = "Price Score Optimisation", x = "Product Rank", y = "Optimal Index")
    )

    return(plot)

&#39;教派&#39;变量是我想传递给函数的sting,以便能够过滤数据表。

3 个答案:

答案 0 :(得分:0)

这是一个用空格传递字符串的选项:

selectInput("subsec", "Subsections", 
choices = list("Space invaders" = "space_invaders", "Pies" = "pies"))

尝试从[1]删除input$subset以使第一个位工作。

答案 1 :(得分:0)

这个MVE对我来说没问题,正如所料:

library(shiny)

ui <- fluidPage(
    selectInput(inputId = "subsec", "Subsections",
                c("Pies", "Milk", "Salad", "Bread"),
                selected = TRUE, multiple = FALSE,
                selectize=FALSE),
    textOutput("text")
)


server <- function(input, output) {

    output$text <- renderText({
        sect <- tolower(input$subsec)

        # Apply a function to the selected value
        paste0('The answer is: ', sect)
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

需要注意的是:

  • 选择值
  • 时无需使用subsec [1]
  • 无需deparse(substitute())
  • 在您提供的示例中,您没有将字符串传递给Price_Score函数,而是传递对象Milk

答案 2 :(得分:0)

如果没有看到公式,很难提出任何建议。围绕as.symbol()包裹input$subsec是否有效?

Price_Score(input$s_ranks[1], input$s_ranks[2], input$s_index[1], input$s_index[2], as.symbol(input$subsec))