从列表中创建并输出多个图

时间:2015-10-23 11:06:27

标签: r

我正在尝试创建并输出64个项目的列表作为pdf。我的数据采用以下形式:

QQJAN     List of 64

file1: List of 2
..$x: num [1:161] 96.7 96.8 97.5 ...
..$y: num [1:161] 9.3 10.3 17.3 ...
..................................................................
file64: List of 2
..$x: num [1:161] 42.6 59.9 70.4 ...
..$y: num [1:161] 9.3 10.3 17.3 ...

我可以使用以下命令对列表中的任何单个项目执行此操作:

plot(QQJAN$file1)

然后可以将这些文件作为pdf输出到我的工作目录,但是如何使用它们的名称来绘制和输出列表中的所有64个文件,即file1.pdf,文件2.pdf等。

这里可以使用lapply函数吗?

可重现的例子:

QQJAN$file1$x=c(1,2,3,4)
QQJAN$file1$y=c(2,4,5,6)

QQJAN$file2$x=c(2,2,3,5)
QQJAN$file2$y=c(2,4,5,6)

2 个答案:

答案 0 :(得分:1)

由于缺乏可重复的示例而未进行测试:

for

如果您只对副作用感兴趣,例如绘图,则lapply循环通常是合适的。如果您需要返回值,则应使用{{1}}。

答案 1 :(得分:0)

我们可以使用lapply循环nameslist元素,通过pdf paste个人名称创建.pdf文件1}},将listQQJAN[[x]]),plot

的子集
 invisible(lapply(names(QQJAN), function(x) {
         pdf(paste0(x, '.pdf'))
          plot(QQJAN[[x]])
         dev.off()}))

数据

QQJAN <- structure(list(file1 = structure(list(x = c(6L, 5L, 15L, 11L, 
14L, 19L, 6L, 16L, 17L, 6L, 13L, 8L, 14L, 14L, 7L, 19L, 4L, 1L, 
11L, 3L, 2L, 12L, 15L, 3L, 5L, 14L, 2L, 12L, 13L, 1L, 7L, 5L, 
8L, 3L, 19L, 5L, 15L, 13L, 14L, 20L), y = c(29L, 23L, 17L, 14L, 
3L, 5L, 24L, 22L, 16L, 21L, 28L, 52L, 28L, 43L, 33L, 60L, 28L, 
18L, 11L, 9L, 30L, 15L, 17L, 8L, 44L, 19L, 57L, 59L, 45L, 30L, 
9L, 13L, 1L, 60L, 39L, 21L, 35L, 50L, 3L, 44L)), .Names = c("x", 
"y")), file2 = structure(list(x = c(11L, 3L, 11L, 5L, 8L, 7L, 
6L, 18L, 8L, 17L, 7L, 15L, 19L, 3L, 10L, 12L, 13L, 2L, 9L, 10L, 
15L, 13L, 3L, 6L, 16L, 1L, 20L, 5L, 9L, 4L, 12L, 1L, 6L, 13L, 
18L, 7L, 18L, 19L, 15L, 13L), y = c(56L, 31L, 40L, 43L, 20L, 
45L, 55L, 8L, 43L, 26L, 7L, 52L, 7L, 31L, 11L, 14L, 55L, 26L, 
4L, 42L, 34L, 44L, 12L, 4L, 30L, 60L, 23L, 44L, 29L, 55L, 6L, 
37L, 11L, 14L, 36L, 52L, 28L, 22L, 31L, 33L)), .Names = c("x", 
"y"))), .Names = c("file1", "file2"))