4

我是 Shiny 的新手,正在尝试为我构建的函数构建更易于访问的输入和输出。我把这个给那些不运行 R 的人,所以试图构建一些在后台运行我的函数然后吐出答案的东西。

不幸的是,我在以我想要的方式获取所有内容并处理一堆错误时遇到了一些麻烦。但是,这是我更尖锐的问题:

我要运行的实际函数需要一个名称(在引号中为“Last,First”)和一个数字。

PredH("Last,First",650)

所以我想要一个闪亮的应用程序,它接受一个名称输入和一个数字输入,然后运行这个程序,然后用我的答案吐出一个数据表。所以有几个问题。

如何以正确的形式将其输入到服务器端脚本上的方程式中,我是否需要在函数中返回它以便可以使用 function$table 类型访问来访问它?(现在我只是在控制台中使用 cat() 函数打印该函数,但知道这可能不适用于这种类型的应用程序。

我想返回一个可以在 PredH14$table 获得的数据框。我如何去建造那个闪亮的?

到目前为止,这是我的代码:

用户界面:

library(shiny)


shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Miles Per Gallon"),

  # Sidebar with controls to select the variable to plot against mpg
  # and to specify whether outliers should be included
  sidebarPanel(
    textInput("playername", "Player Name (Last,First):", "Patch,Trevor"),
   radioButtons("type", "Type:",
                 list("Pitcher" = "P",
                      "Hitter" = "H"
                      )),

    numericInput("PAIP", "PA/IP:", 550),
    submitButton("Run Comparables")


  ),
    mainPanel(
    textOutput("name")
        )

服务器:

library(shiny)

shinyServer(function(input, output) {

sliderValues <- reactive({


    data.frame(
      Name = c("name", "PA"),

        Value = c(as.character(playername),
                  PAIP),

        stringsAsFactors=FALSE)
  })

name=input[1,2] 
PAIP=input[2,2] 
testing <- function(name,PAIP){ 
a=paste(name,PAIP) 
return(a) }
output$name=renderText(testing$a)


})
4

1 回答 1

4

我不太确定我是否 100% 理解了您的问题,但我清楚地看到您想知道如何将 UI 的输入传递到服务器,也许反过来。

在您的服务器代码中,显然您没有从 UI 获得任何输入。基本上你已经在你的 : 中创建了三个输入变量ui.R

1. input$playername
2. input$type 
3. input$PAIP

一个输出:

1. output$name

只是让您知道,sliderValues <- reactive(..)每次输入中有任何输入时都会调用该函数......就像人们单击下拉列表或人们修改文本框中的单词一样。您甚至可以在没有submit button刚刚开始的情况下开始。但是提交按钮的存在实际上让一切变得更容易。Create a submit button for an input form. Forms that include a submit button do not automatically update their outputs when inputs change, rather they wait until the user explicitly clicks the submit button.

所以你可以把你的代码放在类似这样的地方:

# server.R
library(shiny)
shinyServer(function(input, output) {

  sliderValues <- reactive({
      result <- ... input$playername ... input$type ... input$PAIP
      return(result)
  })

  output$name <- renderPlot/renderText (... sliderValues...)
})

# ui.R
library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Miles Per Gallon"),

  sidebarPanel(
    textInput("playername" ... ),
    radioButtons("type" ... ),
    numericInput("PAIP" ... ), 
    submitButton("...")
  ),

  mainPanel(
    textOutput/plotOutput...("name")
  )
 ))

最后,查看可能是您想要的闪亮示例。

library(shiny)
runExample('07_widgets')
于 2013-11-15T00:38:21.410 回答