循环数字,前面是R中的下划线符号

时间:2017-01-17 17:27:03

标签: r loops

我提前道歉,但我在以前与主题相关的帖子中找不到我需要的内容。

假设我有以下数据。 “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_”。我怀疑问题是上面的循环无法识别下划线符号后面的数字。那么,有什么建议吗?

提前谢谢。

2 个答案:

答案 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]并查看会发生什么。