这是一个有效的循环实现吗?

Tre*_*est 2 r

这似乎是涉及R中环路满足与每一个问题"循环不好"和"你这样做是错误的"提供建议使用list,或tapply或者诸如此类的东西.

我正在学习R,并且已经实现了以下循环来为每个因子级别创建图像文件,每次运行时因子级别都会改变:

for(i in unique(df$factor)) {
    lnam <- paste("test_", i, sep="")
    assign(lnam, subset(df, factor==i))
    lfile <- paste(lnam, ".png", sep="")
    png(file = lfile, bg="transparent")
        with(get(lnam), hist(x, main = paste("Histogram of x for ", i, " factor", sep="")))
    dev.off()
} 
Run Code Online (Sandbox Code Playgroud)

这有效.我想将它扩展为可能在这些子组上运行各种测试(也输出到文件)等.

这是循环的有效合法使用吗?或者有一种优选的方法来给这只猫上皮吗?

Hon*_*Ooi 7

一般来说,循环没有任何问题.有时,特别是当你处理文件或调用函数的副作用而不是它们的输出时,循环比*apply调用更容易.但是,当您使用循环来模拟可以矢量化的操作时,它通常会慢得多,因此建议避免它们.

举个具体的例子,我会发表以下评论:

  • 如果你想为一个因子中的每个级别做一些事情,那么使用它levels(factor)而不是更直接unique(factor).
  • 您无需专门为每个因子级别创建新数据框.

考虑到这一点:

for(i in levels(df$factor))
{
    lf <- paste("test_", i, ".png", sep="")
    png(file=lf, bg="transparent",
        with(subset(df, factor == i), hist(x, ....)
    dev.off()
}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以在循环之外使用`paste`函数. (3认同)