这似乎是涉及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)
这有效.我想将它扩展为可能在这些子组上运行各种测试(也输出到文件)等.
这是循环的有效合法使用吗?或者有一种优选的方法来给这只猫上皮吗?
一般来说,循环没有任何问题.有时,特别是当你处理文件或调用函数的副作用而不是它们的输出时,循环比*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)