使用lapply制作包含数据框列表中的因子的图

时间:2016-09-07 23:00:51

标签: r list plot lapply

我生成了一个包含两个因子的数据框:x变量和y变量:

set.seed(1)
abc.df <- data.frame(col1 = rep(c("a", "b", "c"), 1000), col2 = rep(1:4, 750),
                      col3 = rnorm(3000), col4 = rnorm(3000, 2))
names(abc.df) <- c("factor1", "factor2", "q", "value")
abc.df$factor1 <- as.factor(abc.df$factor1)
abc.df$factor2 <- as.factor(abc.df$factor2)
abc_list <- split(abc.df, abc.df$factor1)

我想为每个字母(a,b和c)生成三个图,其中数字因子按颜色区分,但它生成了一条错误消息:

par(mfrow = c(1, 3))
lapply(abc_list, function(x) {plot(abc_list[[x]]$q, abc_list[[x]]$value,
                                   col = factor2)})
Error in abc_list[[x]] : invalid subscript type 'list'

如何使用正确的语法制作一系列图?

1 个答案:

答案 0 :(得分:3)

当您使用lapply循环遍历列表时,传递给函数的参数是列表的元素而不是索引,因此您不能使用abc_list[[x]]代替子集,只需使用{ {1}},所以对你的情况来说:

x

enter image description here

还有一种方便的方法可以使用par(mfrow = c(1, 3)) lapply(abc_list, function(x) {plot(x$q, x$value, col = x$factor2)}) 包与ggplot2来获取此类情节,您不需要将原始数据框拆分为列表但指定{{1作为一个变量来布局你的情节:

facet_grid

enter image description here