0

我有一个小函数,可以创建一个累积分布图,我使用 lapply 在数据集上运行(数据集是按分析物分解的列表)。我想要将绘图标记为“a)”到“g)”的函数,但似乎无法弄清楚如何让 lapply 生成连续的字母。有任何想法吗?代码如下。

cdf.int <- function(data.set) {
  plot(ecdf(log10(data.set$CONC_CALC)), main = "", xlim = c(-3.0, 3.0))
  text(-4, 1.2, "a)", xpd = TRUE)
}

pdf(paste("output/figures/CDF_RegionalData.pdf", sep = ""), 
  height = 11, width = 8)
par(las = 1, omi = c(0.5, 1.0, 1.5, 1.0), mfrow = c(5, 2), ps = 10, family = "sans", mar = c(3.0, 3.0, 3.0, 3.0))
lapply(split.rd, cdf.int) 
dev.off() 
4

2 回答 2

1

这就像一场梦

cdf.int <- function(n) {
  plot(rnorm(10), main = paste0(letters[n], ")"), xlim = c(-3.0, 3.0))
  text(-4, 1.2, "a)", xpd = TRUE)
}

pdf("test.pdf", height = 11, width = 8)
par(las = 1, omi = c(0.5, 1.0, 1.5, 1.0), mfrow = c(5, 2), ps = 10, family = "sans", mar = c(3.0, 3.0, 3.0, 3.0))

lapply(1:6, cdf.int) 
dev.off()

一个(只是一点点)更现实的例子mapply

ll <- list(a=rnorm(10),
           b=rnorm(10))

cdf.int <- function(data, name) {
  plot(data, main = name, xlim = c(-3.0, 3.0))
  text(-4, 1.2, "a)", xpd = TRUE)
}

pdf("test.pdf", height = 11, width = 8)
par(las = 1, omi = c(0.5, 1.0, 1.5, 1.0), mfrow = c(2, 1), ps = 10, family = "sans", mar = c(3.0, 3.0, 3.0, 3.0))

mapply(cdf.int, ll, names(ll)) 
dev.off() 
于 2013-08-02T21:11:52.107 回答
0

这是使用的缺点的一个例子lapply/sapply......列表元素的名称不会传递给函数,只有值会传递。因此,您可以在使用时lapply通过使用names(yourlist)(或可能1:length(yourlist))并从“您的列表”中提取以下内容来解决这个问题:

  lapply(names(yourlist), function(x){ plot( yourlist[[x]] } )

在您的情况下,这确实意味着您需要重写您的函数。

于 2013-08-02T21:08:47.063 回答