我目前正在學習R,並且我試圖改變for循環來使用apply。 上下文是一個帶有2個變量的父框架(以英寸爲單位)和子框架(以英寸爲單位)的數據框浮雕。我想從中反覆取樣並獲得線性模型(使用lm)並將結果保存到向量中。重新設計一個for循環使用適用於R
library(UsingR)
sampleLm <- vector(100,mode="list")
for(i in 1:100) {
sampleGalton <- galton[sample(1:length(galton$child),size=50,replace=F),]
sampleLm[[i]] <- lm(sampleGalton$child ~ sampleGalton$parent)
}
我嘗試這樣做:
sampleLm <- vector(100,mode="list")
sapply(samples, function(x) {
sampleGalton <- galton[sample(1:length(galton$child),size=50,replace=F),]
x <- lm(sampleGalton$child ~ sampleGalton$parent)
})
樣品是從父母給孩子高度的高爾頓高度所採取的代碼。 你可以在UsingR包中獲取這些數據。這樣你會得到遊戲。但真的可能是任何事情。只是一些常規的數據框。
但雖然它正確執行,sampleLm
矢量未更新,並且包含所有None
。我覺得這是正常的,因爲我從R文檔中找到了「無副作用」規則。
必須有一種方法來重新表達這個,所以for
被替換爲apply
。問題是如何?
什麼是'samples'?請使您的代碼具有可重現性。 – 2013-02-25 16:26:33
爲什麼你會期望第二個版本修改sampleLm?我沒有看到任何會導致sapply語句修改sampleLm的內容。 – Dason 2013-02-25 16:27:12
與'apply'系列函數不同,您不需要創建輸出變量並像在for循環中那樣填充它。相反,將'sapply'的輸出分配給它:'sampleLm < - sapply(...)'。 – Justin 2013-02-25 16:27:59