迴圈施工的基礎
在這個例子中,我們將計算資料幀中每列的平方偏差,在本例中為 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),但結果將是相同的事件。