首页 > 解决方案 > 闪亮:textInput 在 R 中没有响应

问题描述

我编写的代码使情节变得闪亮。正如您在代码中看到的那样,当我使用 plot(c(12,11)) 时,我得到了图,但是当我使用 plot(c(input$ vec)) 或 plot(input$ vec) 时,我并没有改变地块。

library(shiny)
library(ggplot2)
library(dplyr)
library(purrr)
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput('vec', 'Enter a vector (comma delimited)', "0,1")
    ),
    
    mainPanel(
      plotOutput(outputId = "distPlot"),
    )
  )
)
           
      server <- function(input, output) {
        output$distPlot <- renderPlot({
          qo <- function(x,m) { 
            p<-x^3+m^3
            return(p)
          }
          
          plot <- function(m) {
            ggplot(tibble(x = c(-10, 20)), aes(x)) +
              map(m, 
                  ~stat_function(fun = qo, aes(color = paste0("heat ", .)), args=list(m = .)))
            
          }
          plot(c(12,11))
          
        
      })
        }
shinyApp(ui,server)

标签: rshiny

解决方案


问题是这input$vec是一个字符串。要在函数中使用输入,您首先必须将字符串拆分为单个数字并转换为数字,例如使用vec <- as.numeric(trimws(unlist(strsplit(input$vec, split = ",")))). 在这里,我首先使用 拆分字符串,,使用strsplit将结果列表转换为向量unlist,通过删除空格trimws,最后转换为数字。

之后,您可以应用您的功能:

library(shiny)
library(ggplot2)
library(dplyr)
library(purrr)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput('vec', 'Enter a vector (comma delimited)', "0,1")
    ),
    
    mainPanel(
      plotOutput(outputId = "distPlot"),
    )
  )
)

server <- function(input, output) {
  output$distPlot <- renderPlot({
    qo <- function(x,m) { 
      p<-x^3+m^3
      return(p)
    }
    
    plot <- function(m) {
      ggplot(tibble(x = c(-10, 20)), aes(x)) +
        map(m, 
            ~stat_function(fun = qo, aes(color = paste0("heat ", .)), args=list(m = .)))
      
    }
    vec <- as.numeric(trimws(unlist(strsplit(input$vec, split = ","))))
    
    plot(vec)
    
  })
}
shinyApp(ui,server)

推荐阅读