使用lapply绘制列表中的数据,并使用列表元素的名称作为绘图标题

时间:2015-06-12 11:07:13

标签: regex r plot

如果我有以下列表:

comp.surv <- list(a = 1:4, b = c(1, 2, 4, 8), c = c(1, 3, 8, 27))
comp.surv
# $a
# [1] 1 2 3 4
# 
# $b
# [1] 1 2 4 8
# 
# $c
# [1]  1  3  8 27

我可以使用lapply绘制每个列表元素:

lapply(comp.surv, function(x) plot(x))

但是,我想将每个列表元素的名称包括为图标题(main)。对于我的示例数据,每个图表的标题分别为abc。首先,我有一个gsub规则给出comp.surv$a,我返回a

gsub(comp.surv\\$([a-z]+), "\\1", deparse(sustitute((comp.surv$a)))
# "a"

哪个好。但是,我无法将此结果嵌入上面的lapply语句中。有什么想法吗?

与此同时,我试图通过创建一个包含主要参数的函数来解决这个问题:

splot <- function(x){
  plot(x, main = gsub(comp.surv\\$([a-z]+), "\\1" deparse(sustitute((x))))
}

lapply(comp.surv, function(x) splot(x))

这将绘制comp.surv的每个子变量,但所有标题都是空白的。

如果我走的是正确的轨道,有人可以推荐吗?

2 个答案:

答案 0 :(得分:7)

一种可能性是循环遍历列表的names

lapply(names(comp.surv), function(x) plot(comp.surv[[x]], main = x))

或稍微详细一点,循环遍历列表索引:

lapply(seq_along(comp.surv), function(x) plot(comp.surv[[x]], main = names(comp.surv)[x]))

答案 1 :(得分:1)

这就是你想要的吗?

ns=names(comp.surv)
lapply(ns, function(x) plot(comp.surv[[x]], main=x,ylab="y"))