我想将数字向量作为输入,然后简单地绘制直方图 . 这是我的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 回答
在服务器端,您将v定义为函数:
然后你尝试使用它作为
as.numeric(...)
的参数:所以R试图转换类的东西:函数加倍 .
Edit :回答OP的后续问题 . 使用以下ui.R和server.R:
在服务器端,
shinyUI(...)
接受两个自动传递的对象:input
和output
. 通过创建各种GUI对象,在ui.R中定义了input
(R术语中的"columns")的属性 . 所以你通过调用selectInput(...)
来创建一个select
对象 . 对象的id是"Vector"
. 这在服务器端引用为:input$Vector
. 请注意,您所谓的Vector
实际上是一个数字:无论用户在选择框中选择什么 . 绘制单个数字的直方图是没有意义的,所以我更改了代码以使输入$ Vector成为正态分布的均值 . 您还遇到了输入$ Vector在您的代码中初始化为NULL的问题,这会引发错误 . 所以我把它改为初始化为0 .该声明:
在服务器端填充
ui.R
中的对象output$main_plot
,该对象由语句定义:滚动它,以下内容:
ui.R:
server.R:
生成这个:
看起来这样做有用!