1

根据 Roland在 R 中使用 sapply() 绘制标题的建议,我创建了以下循环,以从我的数据集中的每个选定变量中制作箱线图。

all.box=function(x) {
  for (i in seq_along(x)) {
    boxplot(x[,i], main = names(x)[i])
  }
}

它很好地完成了这项工作,因为它提供了图表。有人可以向我指出如何使循环返回一些输出,比如箱线图中的 $out 以便能够看到它计算的异常值的数量吗?

非常感谢!

4

2 回答 2

3

在此处使用lapply可以更好地避免以下副作用for

all.box=function(x) {
  res <- lapply(seq_along(x),function(i){
     boxplot(x[,i], main = names(x)[i])$out
  })
  res
}

PS:您可以继续使用for,但您需要在循环中附加一个列表作为结果,或者在调用 boxplot 之前为输出对象分配内存。所以我认为xxapply在这里使用家庭功能更简单。

于 2013-05-25T08:39:23.957 回答
1

如果你想从for循环中返回一些东西,如果它不是一个列表,那么预先分配返回对象是非常重要的。否则for,具有多次迭代的循环会很慢。我建议特别阅读R inferno和 Circle 2。

all.box=function(x) {
  result <- list()
  for (i in seq_along(x)) {
    result[[i]] <- boxplot(x[,i], main = names(x)[i])$out
  }
  result
}
于 2013-05-25T08:46:44.740 回答