我有一个包含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中的错误(&#34; \。([[:alnum:]] +)$&#34;,x):object&#39; id&#39;找不到
为什么id
以前没有被ggsave识别(对于geom_plot
项目?)
答案 0 :(得分:2)
试试这个,
for (ii in seq_along(filenames)) {
tmp <- read.csv(filenames[ii])
p <- 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=paste0("ID", ii, ".png"), p)
}
答案 1 :(得分:1)
因为在ggplot中你提供的数据(在你的情况下是tmp)有一个列ID)。虽然在ggsave中它没有要求数据,所以当你给出一个列名ID时,ggsave不知道如何处理它。
我建议在ggsave中使用i(你的迭代器)。
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 ~ p oly(x, 3, raw=TRUE))
+ ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file=paste0("ID",i,".jpeg"))
}