我的名字是Nate,我正在尝试使用Shiny from RStudio构建一个小数据分析工具。
现在我正在使用我自己的数据,但值是数字的......让我们假装我正在使用R附带的mtcars数据集。
我想: 1.允许我的用户通过下拉菜单从数据框中选择一个数字变量
让计算机计算所述变量的最小值和最大值
允许我的用户从滑块输入
将第一个变量的最大值和最小值之差除以从滑块输入中获得的值
我得到的第一个错误是: 1.二元运算符的非数字参数
所以我尝试使用as.numeric()强制变量,但这导致了我的第二个错误:
在我的server.R文件中放置一个print(max(input $ Var)行给我变量名而不是数字。
对此的任何帮助将不胜感激。我已经发布了下面的部分ui.r和server.r文件。先感谢您。
ui.R:
library(shiny)
load('mtcars')
shinyUI(pageWithSidebar(
headerPanel("MtCars Interactive Analysis Tool"),
sidebarPanel(
selectInput(inputId = "histVar",
label= "Pick Your Variable",
choices=names(mtcars),
selected = NULL)),
sliderInput(inputId = "binNum",
label = h5("Number of bins for Histogram--1 through 50 are allowed"),
min = 1,
max = 50,
value = 15,
step = 1)
mainpanel(...blah blah blah)
server.R:
library(shiny)
load("mtcars")
shinyServer(function(input, output) {
output$histPlot <- renderPlot({
varRangeGet <- range(input$histVar)
#print(varRangeGet)
#print(class(varRangeGet))
#print(max(input$histVar))
realRange<-(varRangeGet[[2]]- varRangeGet[[1]])
binwidthX <- realRange/input$binNum
# Errors out...can't continue
})
})
再次感谢您对此的任何帮助...我不明白为什么我无法对Shiny中的输入变量执行简单计算....
答案 0 :(得分:4)
input$histVar
可让您获得selectInput
名为&#34; histVar&#34;中存储的值。您已使用choices=names(mtcars)
填充了该选项,因此您唯一能够获得的是mtcars
列作为字符向量的名称之一。这只是告诉你选择了什么值。
input
与您的数据集之间没有任何关联。输入只来自您的UI。如果您想使用该变量从mtcars
获取信息,则使用与在R中使用具有列名称的字符串相同的方式。
vals <- mtcars[, input$histVar]
range(vals)
max(vals)
等...
答案 1 :(得分:2)
我想从简单开始,所以这里将您的代码修改为单个脚本。首先看看你能否实现这一目标。适用于我的系统。我从未见过有人在ui.R代码中加载数据。如果你需要动态下拉,那么你需要利用uiOutput,在server.R中加载数据,然后在ui中渲染它。无论如何,首先尝试运行此代码。
library(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel("MtCars Interactive Analysis Tool"),
sidebarPanel(
selectInput(inputId = "histVar",
label= "Pick Your Variable",
choices=names(mtcars),
selected = NULL)),
sliderInput(inputId = "binNum",
label = h5("Number of bins for Histogram--1 through 50 are allowed"),
min = 1,
max = 50,
value = 15,
step = 1)),
server = function(input, output) {
output$histPlot <- renderPlot({
varRangeGet <- range(input$histVar)
#print(varRangeGet)
#print(class(varRangeGet))
#print(max(input$histVar))
realRange<-(varRangeGet[[2]]- varRangeGet[[1]])
binwidthX <- realRange/input$binNum
# Errors out...can't continue
})
}
),port = 3300)