我提前道歉,但我在以前与主题相关的帖子中找不到我需要的内容。
假设我有以下数据。 “bchain”是2192个观测值的数据框。 “日期”列包含2011/01/01至2016/12/31的日期。 “价值”列包含每日汇率。
>bchain
Date Value
1 2011-01-01 0.299998
2 2011-01-02 0.299996
3 2011-01-03 0.299998
4 2011-01-04 0.299899
5 2011-01-05 0.298998
6 2011-01-06 0.299000
7 2011-01-07 0.322000
8 2011-01-08 0.322898
. ....... .......
我想要做的是在不同的图中逐年显示汇率,并使用“for”循环将六个图表保存在我的桌面上。考虑一下我在这篇帖子内容中构建的这个简单的伪代码:
https://www.r-bloggers.com/automatically-save-your-plots-to-a-folder/
PSEUDO-CODE:
Date_2011=bchain[1:365,1]
Date_2012=bchain[366:731,1]
Date_2013=bchain[732:1096,1]
Date_2014=bchain[1097:1461,1]
Date_2015=bchain[1462:1826,1]
Date_2016=bchain[1827:2192,1]
bchain_2011=bchain[1:365,2]
bchain_2012=bchain[366:731,2]
bchain_2013=bchain[732:1096,2]
bchain_2014=bchain[1097:1461,2]
bchain_2015=bchain[1462:1826,2]
bchain_2016=bchain[1827:2192,2]
years=2011:2016
for(i in years){
mypath = file.path("C:/Users/toshiba1/Desktop",paste("myplot_", years[i], ".jpg", sep = ""))
jpeg(file=mypath)
mytitle = paste("my title is", years[i])
plot(Date_[i],bchain_[i], main = mytitle)
dev.off()
}
然后我收到以下错误消息:找不到对象“Date_”。我怀疑问题是上面的循环无法识别下划线符号后面的数字。那么,有什么建议吗?
提前谢谢。
答案 0 :(得分:2)
这是另一种避免制作特定年份数据框架的方法。我使用lubridate
包从日期值中提取年份,生成当年的data.frame
,并绘制这些数据。正如@Konrad所指出的那样,你调用某些对象的方式给你带来了问题 - 我在下面的paste
语句中清理了一些。
library(lubridate)
# Create toy data to plot
bchain <- data.frame(Date = seq.Date(from = as.Date("2011-01-01"), to = as.Date("2016-12-31"),
by = 1),
Value = runif(2192, 0, 1))
years <- 2011:2016
for(i in years){
# Create dataset of just data to plot
bchain_plot <- bchain[year(bchain$Date) == i, ]
# Edited file name w/i jpeg call and fixed paste statement
jpeg(filename=paste0("C:/Users/toshiba1/Desktop/myplot_", i, ".jpg"))
# Plot data w/ title included in plot call
plot(bchain_plot$Date, bchain_plot$Value, main = paste("my title is", i))
dev.off()
}
答案 1 :(得分:1)
你应该正确地调用你的对象一种方法可能涉及在行上使用get
:
# Now plot data number i
x <- get(paste("Date", i, sep = "_"))
# Plot
plot(x)
或简单地通过嵌套:
plot(get(paste("Date", i, sep = "_")))
要测试它,看看如果在R控制台中键入Date_[i]
会发生什么?您是否获得了要传递给plot
函数的对象?通过get
或任何其他适合您的机制到达所需对象,然后将其传递给绘图功能。
我认为你想要遍历你的对象 - 你需要i
而不是[i]
。在R控制台中键入[i]
并查看会发生什么。