R闪亮错误:无法强制类型'封闭'到'double'类型的向量

时间:2013-12-06 17:38:35

标签: r

我想将数字向量作为输入,然后简单地绘制直方图。这是我的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 个答案:

答案 0 :(得分:7)

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

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

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

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

所以R试图将类的某些东西转换成函数加倍。

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

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

声明:

output$mainplot <- ...
服务器端的

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

... 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 :(得分:1)

看起来这样做有用!

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

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

  output$plotVector <- renderPlot({  
data <- v()
hist(data)
    }) 

})