【发布时间】:2016-07-07 08:43:45
【问题描述】:
我最近开始与 R 合作,展示公司和机构(世界银行、EIA、德勤和麦格理)对不同产品(美国天然气、日本 LNG 和 NBP 天然气)的价格预测。
因此,有一张图表显示世界银行关于美国天然气的价格预测,另一张图表显示世界银行关于日本液化天然气的价格预测,另一张图表显示世界银行关于 NBP 天然气的价格预测,依此类推,EIA、德勤和麦格理。
所以现在是 12 个图表。
我正在尝试编写一个带有循环的代码来自动创建和保存图形文件,但我很难让它工作。
不幸的是,我在 sprintf 和 paste 函数上苦苦挣扎,但我真的需要使用它们,但我想不出办法来解决剩余的错误消息。
library(ggplot2)
library(scales)
n <- 1
c1 <- c("USA", "Japan", "NBP")
c2 <- c("World Bank", "EIA", "Deloitte", "Macquarie")
for (i in c1)
{
for (j in c2)
{
sprintf("chemin%d", n) <- "C:\\Travail\\Maxime\\Memoire\\Forecasts\\csv\\paste(i)realizedprice.csv"
sprintf("%srealizedprice", i) <- data.frame(read.table(sprintf("chemin%d", n), sep=";", dec=",", header=TRUE))
sprintf("%srealizedprice$Date", i) <- as.Date(sprintf("%srealizedprice$Date", i), format="%d/%m/%Y")
sprintf("%srealizedpricegraph", i) <- ggplot(data=sprintf("%srealizedprice", i), mapping=aes(x=Date, y=sprintf("%s.price", i))) + geom_line()
sprintf("%s%sforecast", i, j) <- sprintf("%sforecast", j)[sprintf("%sforecast", j)$Price.type == 'Natural Gas, sprintf("%s", i)',]
sprintf("%sgraph", i) <- ggplot(data=sprintf("%s%sforecast", i, j), aes(x=Price.date, y=Price, colour=as.character(paste(Price.type, Publication.date))))+geom_line()+geom_point()+geom_line(data = paste(i)realizedprice, aes(x = Date, y = paste(i).price), color = "cornflowerblue")+xlab('Date')+ylab('Price')+ggtitle("sprintf("World Bank forecast for Natural Gas %s", i)")
sprintf("%sgraph", i) <- sprintf("%sgraph", i) + scale_x_date(breaks = date_breaks("year"),labels = date_format("%Y"))+scale_y_continuous(breaks = seq(0, 25, 1))
mypath <- file.path(sprintf("C:\\Travail\\Myname\\Memoire\\Forecasts\\Graphs\\Boucle\\%d.png", n))
paste(i)graph
png(file=mypath)
plot(sprintf("%sgraph", i))
dev.off()
n <- n + 1
}
}
您对我可以使其工作的方式有任何想法吗? 非常感谢您的帮助!
有了错误消息,我得到:
> library(ggplot2)
> library(scales)
> n <- 1
> c1 <- c("USA", "Japan", "NBP")
> c2 <- c("World Bank", "EIA", "Deloitte", "Macquarie")
> for (i in c1)
+ {
+ for (j in c2)
+ {
+ sprintf("chemin %d", n) <- "C:\\Travail\\Maxime\\Memoire\\Forecasts\\csv\\paste(i)realizedprice.csv"
+ sprintf("%srealizedprice", i) <- data.frame(read.table(sprintf("chemin%d", n), sep=";", dec=",", header=TRUE))
+ sprintf("%srealizedprice$Date", i) <- as.Date(sprintf("%srealizedprice$Date", i), format="%d/%m/%Y")
+ sprintf("%srealizedpricegraph", i) <- ggplot(data=sprintf("%srealizedprice", i), mapping=aes(x=Date, y=sprintf("%s.price", i))) + geom_line()
+ sprintf("%s%sforecast", i, j) <- sprintf("%sforecast", j)[sprintf("%sforecast", j)$Price.type == 'Natural Gas, sprintf("%s", i)',]
+ sprintf("%sgraph", i) <- ggplot(data=sprintf("%s%sforecast", i, j), aes(x=Price.date, y=Price, colour=as.character(paste(Price.type, Publication.date))))+geom_line()+geom_point()+geom_line(data = paste(i)realizedprice, aes(x = Date, y = paste(i).price), color = "cornflowerblue")+xlab('Date')+ylab('Price')+ggtitle("sprintf("World Bank forecast for Natural Gas %s", i)")
Erreur : unexpected symbol in:
" == 'Natural Gas, sprintf("%s", i)',]
sprintf("%sgraph", i) <- ggplot(data=sprintf("%s%sforecast", i, j), aes(x=Price.date, y=Price, colour=as.character(paste(Price.type, Publication.date))))+geom_line()+geom_point()+geom_line(dat"
> sprintf("%sgraph", i) <- sprintf("%sgraph", i) + scale_x_date(breaks = date_breaks("year"),labels = date_format("%Y"))+scale_y_continuous(breaks = seq(0, 25, 1))
Error in sprintf("%sgraph", i) + scale_x_date(breaks = date_breaks("year"), :
argument non numérique pour un opérateur binaire
> mypath <- file.path(sprintf("C:\\Travail\\Maxime\\Memoire\\Forecasts\\Graphs\\Boucle\\%d.png", n))
> paste(i)graph
Erreur : unexpected symbol in "paste(i)graph"
> png(file=mypath)
> plot(sprintf("%sgraph", i))
Error in plot.window(...) : valeurs finies requises pour 'ylim'
De plus : Warning messages:
1: In xy.coords(x, y, xlabel, ylabel, log) :
NAs introduits lors de la conversion automatique
2: In min(x) : aucun argument trouvé pour min ; Inf est renvoyé
3: In max(x) : aucun argument pour max ; -Inf est renvoyé
> dev.off()
windows
2
> n <- n + 1
> }
Erreur : '}' inattendu(e) in "}"
> }
Erreur : '}' inattendu(e) in "}"
【问题讨论】:
-
我猜
'Natural Gas应该有一个结束引用。可能是sprintf("Natural Gas%s", i)。另一个问题是sprintf("chemin%d", n) <-不能在<-的lhs上,可能是assign(sprintf("chemin%d", n), "C:\\Travail\\Maxime\\Memoire\\Forecasts\\csv\\paste(i)realizedprice.csv") -
我试图写 == sprintf("Natural Gas%s", i),] 但我得到:错误:出现意外符号:“type == sprintf("Natural Gas%s", i),] sprintf("%sgraph", i)
-
这就是我所说的,你不能在 lhs 上分配
<-和sprintf,即sprintf("%s%sforecast", i, j) <- -
好的,抱歉,我没有看到您留言的第二部分。谢谢,我会努力解决的。
-
我用 assign(sprintf(something), something2) 替换了所有的 sprintf(someting)
标签: r loops for-loop printf paste