R 用户和所有程序员,
我想为我的第一个闪亮的应用程序寻求帮助。由于我没有计算机科学背景,因此我的问题对于许多用户来说可能是微不足道的。但如果有人能提供一些线索,那将不胜感激。
我正在尝试为伦敦、巴黎和柏林的平均温度绘制交互式图形。我使用 weatherData 包从 www.wunderground.com 下载了数据。我正在使用 Chris Beeley 的书和 Rstudio 中的示例来设计我自己的应用程序。
在我的 server.R 中,我首先上传了三个数据文件。然后,我有带有控件的侧边栏来选择数据集。我在侧边栏中也有日期范围。一旦用户选择了位置和时间范围,我要求 R 做一些数据整理并传递对象 passData 以进行下一个操作。当 R 到达 renderplot() 时,我假设 R 有一个正确的数据框并使用 ggplot2 生成一个图形。但是,我收到以下错误消息。
打印错误(theGraph):找不到对象“theGraph”
这让我觉得 R 可能没有正确的数据框来生成输出图形。我想知道是否有人能发现我在这里做错了什么。我还想知道在 reactive() 中安排数据是否是一件好事。非常感谢您的关注和支持。
我把我的代码留在这里。
### ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Europe temperature 2013"),
sidebarPanel(
selectInput("dataset", "Choose a location",
choices = c("Berlin Tigel Airport",
"London City Airport",
"Paris Charles De Gaulle")
),
dateRangeInput("daterange", "Date Range",
start = "2013-01-01",
end = "2013-12-31",
min = "2013-01-01",
max = "2013-12-31"
)
),
mainPanel(
plotOutput("theGraph")
)
))
服务器.R
### Weather server.R
library(shiny)
library(weatherData)
library(ggplot2)
library(scales)
library(plyr)
### load weather data.
berlin <- read.csv("berlin.csv", header = T)
london <- read.csv("london.csv", header = T)
paris <- read.csv("paris.csv", header = T)
shinyServer(function(input, output){
# Return the requested dataset
datasetInput <- reactive({
switch(input$dataset,
"Berlin Tigel Airport" = berlin,
"London City Airport" = london,
"Paris Charles De Gaulle" = paris)
})
# Prepare data once and then pass around the program.
passData <- reactive({
foo <- datasetInput()
foo$shortdate <- strftime(foo$Time, format = "%Y-%m-%d")
foo$shortdate <- as.Date(foo$shortdate, format = "%Y-%m-%d")
foo <- foo[foo$shortdate %in%
seq.Date(input$daterange[1],
input$daterange[2], by = 1), ]
foo
})
output$theGraph <- renderPlot({
graphdata <- ddply(passData(), .(shortdate), summarize, mean_C = mean(TemperatureC))
if(input$dataset == "berlin"){
theGraph <- ggplot(graphdata(), aes(shortdate, mean_C)) +
geom_line() +
scale_x_date(labels = date_format("%Y-%m-%d")) +
xlab("") +
ylab("Mean Temperature (C)") +
ggtitle("2013 Average Daily Temperature in Berlin")
}
if(input$dataset == "london"){
theGraph <- ggplot(graphdata(), aes(shortdate, mean_C)) +
geom_line() +
scale_x_date(labels = date_format("%Y-%m-%d")) +
xlab("") +
ylab("Mean Temperature (C)") +
ggtitle("2013 Average Daily Temperature in London")
}
if(input$dataset == "paris"){
theGraph <- ggplot(graphdata(), aes(shortdate, mean_C)) +
geom_line() +
scale_x_date(labels = date_format("%Y-%m-%d")) +
xlab("") +
ylab("Mean Temperature (C)") +
ggtitle("2013 Average Daily Temperature in Paris")
}
print(theGraph)
})
})
我的 csv 文件示例。
### The files look like this. Three columns (Time, Temperature C, TemperatureF)
Time TemperatureC TemperatureF
2013-01-01 01:00:00 6 NA
真诚的,科塔