繁体   English   中英

使用sapply()在R中绘制标题

[英]Plot titles in R using sapply()

我想使用sapply()使qqnorm绘制出数据框中的每个变量。 到目前为止,这是我得到的:

myfun=function(x) {
  c(qqnorm(x),
    qqline(x)
  )
}

sapply(mydata, myfun)

它可以工作,但是,我希望每个图在图的标题中都有各自的变量名。 怎么做?

非常感谢 ;-)

在这种情况下, l_ply更适合,因为您只需要绘制即可,因此不需要输出。 基于@Henrik的答案,我们有

require(plyr)
myfun <- function(x, data, ...) {
  c(qqnorm(data[[x]], main = names(data)[x], ...),
    qqline(data[[x]])
  )
}

l_ply(seq_len(ncol(swiss)), myfun, data = swiss)

编辑

如果要查看图形,则有很多选择,其中之一是将绘图设备划分为一个,并将每个qqplot绘制在设备的一部分中。

par(mfrow = c(3, 2))
l_ply(seq_len(ncol(swiss)), myfun, data = swiss)

问题在于,这样做时names不会传递给函数,而只会传递给未命名的列表元素。 您需要稍微改变一下函数,只交出索引,然后对整个对象进行处理(即,隐式地执行for循环并使用迭代器):

data(swiss)

myfun=function(x, data) {
  c(qqnorm(data[[x]], main = colnames(data)[x]),
    qqline(data[[x]])
  )
}

lapply(1:ncol(swiss), myfun, data = swiss)

另外,我将功能更改为lapply并以swiss数据集为例。

这是一个for循环,它是对此最合适的循环构造。

for (i in seq_along(swiss)) {
  qqnorm(swiss[,i], main = names(swiss)[i])
  qqline(swiss[,i])
  Sys.sleep(3) #to see something and avoid problems in RStudio
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM