【问题标题】:Plot titles in R using sapply()使用 sapply() 在 R 中绘制标题
【发布时间】:2013-05-24 07:33:47
【问题描述】:

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

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

sapply(mydata, myfun)

它有效,但是,我希望每个情节在情节标题中都有各自的变量名称。这是怎么做到的?

非常感谢 ;-)

【问题讨论】:

  • 阅读?qqnorm。请特别注意main 参数。
  • 感谢 Roland,我知道主要参数,但我不知道如何设置它以显示每个相应变量的名称(在 sapply 生成的结果图形中)。
  • 你为什么不使用一个很好的旧 for 循环呢?由于您不想要返回值,*apply 循环在这里没有任何优势。
  • 非常简单:我不知道 for 循环会成功,也不知道如何使用它。但我要学习它。感谢您的建议!

标签: r plot sapply


【解决方案1】:

在这种情况下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)

【讨论】:

  • 我喜欢省略号 (...) 的引入,自动看起来更专业(也使用 seq_len)。 I can only say one thing.
  • 听起来很合理,但它什么也没画。
  • 它适用于我......嗯,但如果你麻烦使用 sapply 或 lapply 然后。
  • 还是没有运气。 sapply 和 lapply 返回大量输出,而不是图表。
  • 奇怪的是,重新启动 R 有帮助。这两个功能都像一个魅力。谢谢你们!
【解决方案2】:

问题在于,当您这样做时,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数据集为例。

【讨论】:

  • 看起来不错,但它告诉我 lapply(1:nrow(swiss), myfun, data = swiss) .subset2(x, i, exact = exact) 中的错误:当我下标越界尝试使用它。
  • 谢谢你的回答,只是一个小错字我想你想要qqline(data[[x]])
  • 我想 - 它给了我很多输出,但没有图表。 (请原谅我的跛脚,可能我只是遗漏了一些明显的东西)。
  • 嗯,适合我。我的意思是,它只显示最后一个情节,但你的问题只要求标题,这就是它添加的内容。如果你想要别的东西,你可能需要改变你的问题。 (或尝试dev.off(),直到出现错误然后再次运行)
  • 看起来 dev.off() 是解决方案(巴蒂斯特也提到过)。感谢大家减少我的野心:)
【解决方案3】:

这是一个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
}

【讨论】:

  • 哦,是的,完美运行。 3s 延迟如何帮助避免问题?只是好奇。
  • 好吧,如果我省略了延迟,有些图不会在 RStudio 中显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多