【发布时间】:2016-08-27 12:47:25
【问题描述】:
我有一个包含 csv 文件的文件夹。我正在遍历这些 csv 文件并为每个 csv 文件创建一个图。我可以通过:
setwd("/myfiles/folder")
filenames = dir(pattern="*.csv")
for (i in 1:length(filenames)) {
tmp <-read.csv(filenames[i]);
print(ggplot(aes(x = count, y = time), data = tmp) + geom_point(aes(color = id))
+ geom_smooth(aes(color = id), method= "lm", se = F, formula=y ~ poly(x, 3, raw=TRUE))
+ ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file="ID_.jpeg"))
}
但是,正如您所期望的那样,这只会创建一个 .jpeg 文件,因此每次都会被覆盖,我只剩下最后保存的绘图了。
我试过了:
for (i in 1:length(filenames)) {
tmp <-read.csv(filenames[i]);
print(ggplot(aes(x = count, y = time), data = tmp) + geom_point(aes(color = id))
+ geom_smooth(aes(color = id), method= "lm", se = F, formula=y ~ poly(x, 3, raw=TRUE))
+ ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file="ID"+id+".jpeg"))
}
但这会导致:
regexpr("\.([[:alnum:]]+)$", x) 中的错误:找不到对象 'id'
为什么 id 以前是不被 ggsave 识别(对于 geom_plot 项目)?
【问题讨论】:
-
R 中的
+未完成字符串连接,请使用paste()。例如:ggsave(file=paste0("ID", ID, ".jpeg"))。另外,“ID”从何而来?你的意思是小写的id?您只需为文件名选择一个值。 -
抱歉,我已经编辑了我的问题 - 我的意思是
id而不是ID。id来自 csv 文件,它是一个列标题。它仍然在说object 'id' not found。数据源temp在开头指定为ggplot -
好吧,ggsave 不会从图中读取数据。如果你想从 tmp 获取一个值,你需要明确,即
tmp$id。但请记住,tmp 的每一行都有自己的 Id 值,如果您愿意,可以使用第一行tmp$id[1] -
这里的部分问题可能是风格上的;可以通过简单地添加到绘图对象的末尾来包含
ggsave(),但老实说,我以前从未见过这样做(而且我已经看到了 lots 的 ggplot2 代码)。通常,人们会创建一个绘图对象并将其传递给ggsave在单独的行中。 -
@joran 我认为“添加” ggsave 非常具有误导性;它等同于在
qplot() + NULL后面跟着ggsave(filename),即它似乎工作是因为有两个附带的副作用:i)ggsave()没有返回值,也没有类,所以ggplot2:::add_ggplot很高兴什么都不做; ii)ggsave()保存显示的最新绘图,如果没有明确传递,这在此处有效(交互式会话),但不应与qplot() %>% ggsave(file="test.pdf")混淆。