现在我正在使用自己的数据,但值是数字...让我们假设我正在使用 R 附带的 mtcars 数据集。
我愿意:
允许我的用户通过下拉菜单从数据框中选择数字变量
让计算机计算所述变量的最小值和最大值
允许我的用户从滑块输入中输入 1 到 50 之间的数字
将第一个变量的最大值和最小值之差除以从滑块输入获得的值
我遇到的第一个错误是:
所以我尝试使用 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)
服务器.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 中对输入变量执行简单的计算...
input$histVar
允许您获取存储在 selectInput
中名为“histVar”的值。您已经用 choices=names(mtcars)
填充了该选择,因此您唯一返回的是 mtcars
的列名称之一作为字符向量。这只是告诉您选择了什么值。
input
和您的数据集之间没有任何联系。输入仅来自您的用户界面。如果您想使用该变量从 mtcars
获取信息,您可以像在 R 中使用带有列名的字符串一样进行操作。
vals <- mtcars[, input$histVar]
range(vals)
max(vals)
等等...
我喜欢从简单开始,所以这里是将您的代码修改为单个脚本。首先看看你是否能做到这一点。适用于我的系统。我从未见过有人在 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)