【发布时间】:2015-12-12 16:06:00
【问题描述】:
我有一个数据框列表:
str(subsets.d)
List of 22
$ 1 :'data.frame': 358 obs. of 118 variables:
..$ Ac_2017_1 : num [1:358] 0 0 0 0 0 0 0 0 0 0 ...
..$ Ac_9808_1 : num [1:358] 0 0 0 0 0 ...
..$ dates : Ord.factor w/ 6 levels "April"<"May"<..: 1 1 1 1 1 1 1
$ 19 :'data.frame': 358 obs. of 2 variables:
..$ Ac_8598_19: num [1:358] 0.000257 0.000288 0.000171 0 0.000562 ...
..$ dates : Ord.factor w/ 6 levels "April"<"May"<..: 1 1 1 1 1 1 1
我继续将其转换为长格式:
library(reshape2)
subsets.m <- lapply(subsets.d, function(x) melt(x))
然后我想按日期制作箱线图:
library(ggplot2)
lapply(subsets.m, function(x)
ggplot(x, aes(dates, value)) + geom_boxplot() + facet_wrap(~variable, scale="free_y"))
是否可以将 ggsave() 或 pdf() 放在 lapply 内部或外部?如果是这样,我如何根据数据框命名保存的图?
额外问题,由于列表中的数据框具有不同的维度,因此图的大小可能不同。我可以调整一下吗?
这是一些小的示例数据:
dput(list1)
list(structure(list(Ac_7595_JG37 = c(0.000128383, 0.000576914,
0.000341631, 0.000729133, 0.000187486, 0.00086127, 0.000594978,
0.000631912, 0.000502274, 0.0004846, 0, 0.000148386, 0.000298153,
0.000828969, 0.000436815, 7.28336e-05, 0.000304842, 0.000301909,
0.000233694, 0.000208491), Ac_7474_JG37 = c(0, 0, 0.000512446,
0, 0.000562457, 0, 0.000198326, 0.000473934, 0, 0.000138457,
0.000132554, 0, 0.000198769, 0.000207242, 0.000145605, 0.000364168,
0, 0.000301909, 0.000116847, 0), dates = structure(c(1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L), .Label = c("April", "May", "June", "August", "October",
"November"), class = c("ordered", "factor"))), .Names = c("Ac_7595_JG37",
"Ac_7474_JG37", "dates"), row.names = c("1", "2", "3", "4", "5",
"6", "7", "8", "9", "10", "61", "62", "63", "64", "65", "66",
"67", "68", "69", "70"), class = "data.frame"), structure(list(
Ac_8732_20 = c(0.000513534, 0.000384609, 0.000341631, 0.000729133,
0.000937429, 0.000322976, 0.000297489, 0.000394945, 0.000669698,
0.000346143, 0.000265108, 0.000296773, 0.000596306, 0.000310863,
0, 0.000509835, 0, 0.000301909, 0.000233694, 0), dates = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L), .Label = c("April", "May", "June", "August",
"October", "November"), class = c("ordered", "factor"))), .Names = c("Ac_8732_20",
"dates"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "61", "62", "63", "64", "65", "66", "67", "68", "69",
"70"), class = "data.frame"))
【问题讨论】:
-
使用
for循环。这是完成这项任务的更好选择。 -
是的,你可以,也许
deparse(substitute())是一种命名方法。我还使用了将comment分配给每个data.frame并在保存名称中使用comment(df)的方法。 -
您的示例中的名称是什么?您想以何种方式“调整”不同的尺寸?