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

bru*_*lin 5 regex plot r

如果我有以下列表:

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
Run Code Online (Sandbox Code Playgroud)

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

lapply(comp.surv, function(x) plot(x))
Run Code Online (Sandbox Code Playgroud)

但是,我想将每个列表元素的名称包含为plot title(main).对于我的数据.例如,每幅图的标题是a,b和c分别.首先,我有一个gsub规则comp.surv$a,我回来a:

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

这很好.但是我不能将这个结果嵌入lapply上面的陈述中.有任何想法吗?

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

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

lapply(comp.surv, function(x) splot(x))
Run Code Online (Sandbox Code Playgroud)

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

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

Hen*_*rik 7

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

lapply(names(comp.surv), function(x) plot(comp.surv[[x]], main = x))
Run Code Online (Sandbox Code Playgroud)

或稍微冗长,循环遍历列表索引:

lapply(seq_along(comp.surv), function(x) plot(comp.surv[[x]], main = names(comp.surv)[x]))
Run Code Online (Sandbox Code Playgroud)