我是制作闪亮应用程序的新手。本质上我是在尝试制作一个闪亮的应用程序,它可以做到以下几点:
- ui允许你从本地计算机装入df
1.读取DF,然后用户可以从下拉菜单中选择两个其他输入- Dataframe 中的列名,以绘制ggplot
1.给出输出ggplot
以下是正在发生的事情 - DF被精细地读取
- UI中的下拉选择菜单输入工作正常
- ggplot就是没有React
下面是我的代码:
library(shiny)
library(readxl)
library(ggplot2)
library(dplyr)
ui <- fluidPage(
titlePanel("Upload Excel Sheet"),
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose Excel Sheet",
accept = c(
"text/csv",
"text/comma-separated-values,text/plain",
".csv")),
selectInput("x", "X-axis", choices = ""),
selectInput("y", "Y-axis", choices = "")
),
mainPanel(
plotOutput("plot1")
)
)
)
server <- function(input, output,session) {
data <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
read_excel(inFile$datapath)
})
observe({
updateSelectInput(session, "x", choices = names(data()))
updateSelectInput(session, "y", choices = names(data()))
})
output$plot1<- renderPlot({
data()%>%ggplot(aes(x=input$x, y=input$y))+geom_bar(stat="identity"))
})
}
shinyApp(ui = ui, server = server)
我尝试过的:
1.我用一个表输出(renderTable)替换了绘图输出(renderPlot),看到代码"读取" df并输出表。
1.我已经在一段单独的代码(read_excel)中将df拉到R中,然后对它运行ggplot命令,它似乎工作得很好。
我觉得我错过了一些明显的东西,也许是一些关键的基本。如果可能的话,请尝试在任何excel工作表在您的本地目录的代码。
1条答案
按热度按时间e4yzc0pl1#
这里有几点需要调整。
geom_bar(stat="identity"))
有一个额外的右圆括号,已删除。ggplot2
美学需要要么是非标准的评价 * 符号 *(这里不可行),要么我们需要使用这里描述的技术: 也就是.data[[varname]]
(带有字符串)或{{ varname }}
(带有用户提供的NSE符号)。https://ggplot2.tidyverse.org/articles/ggplot2-in-packages.html#using-aes-and-vars-in-a-package-function-1. Namely,.data[[varname]]
(with strings) or{{ varname }}
(with user-provided NSE symbols). We'll use the former here.一些可选的东西可以提高弹性(以及良好的代码实践):
1.我建议自由地使用
req(.)
。请看我的例子。它不仅处理了一些你必须处理的if (is.null(..))
,它还非常好地处理了下游的React性。1.您允许使用
".csv"
,但始终使用read_excel
,我通过包含一个简单的if
修复了这个问题。密码。
扩展:除了
req
之外,我还建议您熟悉一下validate
和need
,例如,如果我们将您的data <- reactive(.)
更新为:(* 并且在其他地方没有其他改变 *),那么所有依赖的React性块都"看到"问题。例如,如果我给CSV提供的数字列不足,我们会看到
我们通常会看到
(其中的情节是窥视出底部)。