我正在使用R,我有一个向量存储目录中的文件名称:
file_list <- c("loc1","loc2", ...)
我还有一个列表,存储每个位置的信息数据帧,例如
head(flist[[1]])
x y1 y2 y3 y4
1 0.01000 0.1208 0.02161 0.00179 0.0002174
1232 0.03333 0.2250 0.09075 0.01507 0.0029956
45 0.05000 0.2868 0.14409 0.02998 0.0069587
1708 0.06667 0.3429 0.19718 0.04795 0.0123678
1842 0.07500 0.3690 0.22315 0.05776 0.0155406
15 0.10000 0.4407 0.29743 0.08934 0.0265723
(文件名的索引在flist中具有相应的元素索引)
可以将每个文件信息与其他一些文件进行比较,但不是全部。所以我创建了4组:
g1 = "loc5"
g2 = c("loc1","loc4","loc10")
...
等
我想在一个图上为“loc1”,“loc4”和“loc10”绘制x与y4的关系,在另一个图上为“loc2”和“loc9”绘制x与y3的对比等。
但是,我似乎找不到比通过文件列表的for循环更麻烦的东西,并分配一些嵌入的'ifs'来测试每个单独的文件名。
我想知道是否有例如自动创建四个空图(或子图)的方法,然后根据文件名(例如file_list [i])在相应的一个上调用plot命令。
或欢迎任何其他有效的方法!
答案 0 :(得分:1)
好。首先,这里有一些符合您描述的虚拟数据
# vector with file names, and list of data frames for each file
file_list <- paste0('loc', 1:10)
flist <- lapply(1:10, function(dummy) data.frame(x=runif(6), y3=runif(6), y4=runif(6)))
# file groups to plot
g1 <- "loc5"
g2 <- c("loc1","loc4","loc10")
这是我如何解决问题
# first, add a column to each data frame with the file name
for(i in seq_along(flist)) flist[[i]]$file <- file_list[i]
# now a function that extracts data for a given group to a single data.frame
# and plots x vs a given y variable
library(ggplot2)
plot_group <- function(g, yvar) {
plot_data <- do.call(rbind, flist[file_list %in% g])
ggplot(plot_data, aes_string(x='x', y=yvar, color='file')) +
geom_point() + theme_classic()
}
plot_group(g2, 'y4')
为您提供: