获取输入$变量shiny的最大值和最小值

问题描述 投票:0回答:2

现在我正在使用自己的数据,但值是数字...让我们假设我正在使用 R 附带的 mtcars 数据集。

我愿意:

  1. 允许我的用户通过下拉菜单从数据框中选择数字变量

  2. 让计算机计算所述变量的最小值和最大值

  3. 允许我的用户从滑块输入中输入 1 到 50 之间的数字

  4. 将第一个变量的最大值和最小值之差除以从滑块输入获得的值

我遇到的第一个错误是:

  1. 二元运算符的非数字参数

所以我尝试使用 as.numeric() 强制变量,但这导致了我的第二个错误:

  1. 通过强制引入的NA

在我的 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 中对输入变量执行简单的计算...

r variables shiny
2个回答
4
投票

input$histVar
允许您获取存储在
selectInput
中名为“histVar”的值。您已经用
choices=names(mtcars)
填充了该选择,因此您唯一返回的是
mtcars
的列名称之一作为字符向量。这只是告诉您选择了什么值。

input
和您的数据集之间没有任何联系。输入仅来自您的用户界面。如果您想使用该变量从
mtcars
获取信息,您可以像在 R 中使用带有列名的字符串一样进行操作。

vals <- mtcars[, input$histVar]
range(vals)
max(vals)

等等...


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)
© www.soinside.com 2019 - 2024. All rights reserved.