迴圈施工的基礎

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