我想将数字向量作为输入,然后简单地绘制直方图。这是我的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'类型的矢量”
你能帮忙吗?谢谢。答案 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(...)
会自动传递两个对象:input
和output
。 input
的属性(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)
})
})