“for”循环输出

时间:2013-05-25 08:08:23

标签: r for-loop boxplot outliers

基于Roland在Plot titles in R using sapply()的建议,我创建了以下循环,以便在我的数据集中的每个选定变量中制作箱图。

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

它完美地完成了它提供图形的工作。有人可以指出我如何让​​循环返回一些输出,比如来自boxplot的$ out能够看到它计算出的异常值的数量吗?

Thanx很多!

2 个答案:

答案 0 :(得分: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家庭功能更简单。

答案 1 :(得分:1)

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

all.box=function(x) {
  result <- list()
  for (i in seq_along(x)) {
    result[[i]] <- boxplot(x[,i], main = names(x)[i])$out
  }
  result
}