首页 文章

R闪亮错误:无法强制输入'closure'类型为'double'的向量

提问于
浏览
7

我想将数字向量作为输入,然后简单地绘制直方图 . 这是我的R代码:

ui.R:

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Hello Shiny!"),

  sidebarPanel(selectInput("Vector", "Select Numbers", c(1,2,3,4), selected = NULL, multiple = TRUE)),

  mainPanel( plotOutput("plotVector"))
))

Server.R:

library(shiny)
shinyServer(function(input, output) {

v<- function()
 {
  v <- rnorm(input$Vector)#take vector as input
}

  output$plotVector <- renderPlot({  hist(as.numeric(v))}) 

})

运行应用程序的代码:

library(shiny)
runApp("C:/Users/me/Desktop/R Projects/testShiny")

当我运行这个时,我收到错误“不能强制类型'封闭'到'double'类型的向量”

你能帮我吗?谢谢 .

2 回答

  • 7

    在服务器端,您将v定义为函数:

    v<- function()
     {
      v <- rnorm(input$Vector)#take vector as input
    }
    

    然后你尝试使用它作为 as.numeric(...) 的参数:

    output$plotVector <- renderPlot({  hist(as.numeric(v))})
    

    所以R试图转换类的东西:函数加倍 .

    Edit :回答OP的后续问题 . 使用以下ui.R和server.R:

    在服务器端, shinyUI(...) 接受两个自动传递的对象: inputoutput . 通过创建各种GUI对象,在ui.R中定义了 input (R术语中的"columns")的属性 . 所以你通过调用 selectInput(...) 来创建一个 select 对象 . 对象的id是 "Vector" . 这在服务器端引用为: input$Vector . 请注意,您所谓的 Vector 实际上是一个数字:无论用户在选择框中选择什么 . 绘制单个数字的直方图是没有意义的,所以我更改了代码以使输入$ Vector成为正态分布的均值 . 您还遇到了输入$ Vector在您的代码中初始化为NULL的问题,这会引发错误 . 所以我把它改为初始化为0 .

    该声明:

    output$mainplot <- ...
    

    在服务器端填充 ui.R 中的对象 output$main_plot ,该对象由语句定义:

    ... plotOutput("main_plot")...
    

    滚动它,以下内容:

    ui.R:

    library(shiny)
    shinyUI(pageWithSidebar(
      headerPanel("Hello Shiny!"),
      sidebarPanel(selectInput("Vector", "Select Mean of Distribution", c(0,1,2,3,4), selected = 0, multiple = TRUE)),
      mainPanel( plotOutput("main_plot"))
    ))
    

    server.R:

    library(shiny)
    shinyServer(function(input, output) {
      v<- function() {
        return(rnorm(100,mean=as.numeric(input$Vector)))  
      }
      output$main_plot <- 
        renderPlot( 
          hist(v(), breaks=10, xlab="",
               main="Histogram of 100 Samples\n taken from: N[mean, sd=1]")) 
    })
    

    生成这个:

  • 1

    看起来这样做有用!

    library(shiny)
    shinyServer(function(input, output) {
    
    v<- function()
     {
      v <- rnorm(input$Vector)#take vector as input
    }
    
      output$plotVector <- renderPlot({  
    data <- v()
    hist(data)
        }) 
    
    })
    

相关问题