在这种情况下如何在 R Studio 中传递输入值?
how to pass an input value in R Studio in this case?
如果我 运行 我的代码在这种情况下,它可以工作,知道输入尚未通过。
该代码只是从 data.csv
中生成数据框。
此数据框有许多以下列 code
、vaccinationsTotal
、peopleFirstTotal
、peopleFullTotal
、peopleBoosterTotal
我想做的只是 select 通过 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
只有一个值,即 vaccinesTotal
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")
在这种情况下如何传递输入变量?
我花了几天时间尝试。
您在代码中犯了 3 个错误。
您正在通过input$sel
进行总结。你需要传递的是get(input$sel)
.
另一件事是当您在 R 中汇总数据时,它使用您正在汇总的数据的列名。因此,在您的情况下,在绘制数据时,您需要将相同的列名传递给 ggplot
的 y-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
函数中对其进行调整。
如果我 运行 我的代码在这种情况下,它可以工作,知道输入尚未通过。
该代码只是从 data.csv
中生成数据框。
此数据框有许多以下列 code
、vaccinationsTotal
、peopleFirstTotal
、peopleFullTotal
、peopleBoosterTotal
我想做的只是 select 通过 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
只有一个值,即 vaccinesTotal
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")
在这种情况下如何传递输入变量? 我花了几天时间尝试。
您在代码中犯了 3 个错误。
您正在通过
input$sel
进行总结。你需要传递的是get(input$sel)
.另一件事是当您在 R 中汇总数据时,它使用您正在汇总的数据的列名。因此,在您的情况下,在绘制数据时,您需要将相同的列名传递给
ggplot
的y-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
函数中对其进行调整。