在这种情况下如何在 R Studio 中传递输入值?

Posted

技术标签:

【中文标题】在这种情况下如何在 R Studio 中传递输入值?【英文标题】:how to pass an input value in R Studio in this case? 【发布时间】:2022-01-20 06:58:30 【问题描述】:

如果我在这种情况下运行我的代码,它可以工作,知道输入尚未通过。 该代码只是从data.csv 中生成数据框。 这个 datframe 有许多以下列code vaccinationsTotal peopleFirstTotal peopleFullTotal peopleBoosterTotal 我想做的只是通过input$sel选择列

library(shiny)
library(dplyr)
library(ggplot2)
library(magrittr)


library(readr)
dataf <- read_csv("data.csv")


server <- function(input, output, session) 
 #Summarize Data and then Plot 
data <- reactive(
    req(input$sel)
     df <- dataf %>%  group_by(code) %>% summarise(vaccinationsTotal)
    print(df)
  )
  
  #Plot 
  output$plot <- renderPlot(  
   
    g <- ggplot(data(), aes( y = vaccinationsTotal  ,x = code) ) 
    g + geom_bar( stat = "sum")
  
  )


ui <- basicPage(
  
  selectInput(inputId = "sel",
              label = "eine möglichkeit auswählen",
             
               list("vaccinationsTotal","peopleFirstTotal","peopleFullTotal","peopleBoosterTotal")),
 
   plotOutput("plot")
)

shinyApp(ui = ui, server = server)

如果我在将 summarise(vaccinationsTotal) 替换为 summarise(input$sel) 之后运行我的代码,它会向我显示 ylim 仅具有一个值,即接种总数


 df <- dataf %>%  group_by(code) %>% summarise(vaccinationsTotal)
    print(df)
  )
  
  #Plot 
  output$plot <- renderPlot(  
   
    g <- ggplot(data(), aes( y = vaccinationsTotal  ,x = code) ) 
    g + geom_bar( stat = "sum")
   

在这种情况下如何传递输入变量? 我花了几天时间尝试。

【问题讨论】:

请添加数据重现问题。 @VishalA。我也想到了,但是虚拟数据也可以工作,但是如果你能用数据弄清楚,那么这里就是数据文件。 impfdashboard.de/static/data/germany_vaccinations_by_state.tsv 【参考方案1】:

您在代码中犯了 3 个错误。

    您通过input$sel 进行总结。你需要传递的是`get(input$sel)。

    另一件事是当您在 R 中汇总数据时,它使用您正在汇总的数据的列名。因此,在您的情况下,在绘制数据时,您需要将相同的列名传递给ggploty-axis

或者您可以在汇总时重命名该列。像这样:

summarise(output = get(input$sel))

    现在,您只需将传递的变量名称更改为您在 summarise 函数中重命名时使用的名称变量名称。
server <- function(input, output, session) 
  #Summarize Data and then Plot 
  data <- reactive(
    req(input$sel)
    df <- dataf %>%  
      group_by(code) %>% 
      summarise(output = get(input$sel))
    print(df)
  )
  
  #Plot 
  output$plot <- renderPlot(  
    g <- ggplot(data(), aes(y = output, x = code) ) 
    g + geom_bar( stat = "sum")
    
  )

请注意,这样做会将output 显示为您的y-axis 标签。虽然您可以在 ggplot 函数中对其进行调整。

【讨论】:

以上是关于在这种情况下如何在 R Studio 中传递输入值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用角度的ng的情况下将输入值从父组件传递给子组件?

在这种特殊情况下在 PHP 脚本之间传递值

如何将视频作为输入传递给Android Studio中的python代码

在这种情况下,如何获得外部 foreach 循环值?

Vue - 在这种情况下如何传递数组?

如何将 vb.net 中日期的空值传递给 sql 存储过程?