循环施工的基础
在这个例子中,我们将计算数据帧中每列的平方偏差,在本例中为 mtcars
。
选项 A:整数索引
squared_deviance <- vector("list", length(mtcars))
for (i in seq_along(mtcars)){
squared_deviance[[i]] <- (mtcars[[i]] - mean(mtcars[[i]]))^2
}
squared_deviance
是一个 11 元素列表,正如预期的那样。
class(squared_deviance)
length(squared_deviance)
选项 B:字符索引
squared_deviance <- vector("list", length(mtcars))
Squared_deviance <- setNames(squared_deviance, names(mtcars))
for (k in names(mtcars)){
squared_deviance[[k]] <- (mtcars[[k]] - mean(mtcars[[k]]))^2
}
如果我们想要一个 data.frame
怎么办?好吧,有很多选项可以将列表转换为其他对象。但是,也许在这种情况下最简单的方法是将 for
结果存储在 data.frame
中。
squared_deviance <- mtcars #copy the original
squared_deviance[TRUE]<-NA #replace with NA or do squared_deviance[,]<-NA
for (i in seq_along(mtcars)){
squared_deviance[[i]] <- (mtcars[[i]] - mean(mtcars[[i]]))^2
}
dim(squared_deviance)
[1] 32 11
虽然我们使用字符选项(B),但结果将是相同的事件。