2017-05-14 63 views
2

所以,我有下面我的問題和R代碼:(尼羅河數據爲R的一個包括數據集)帶R中For循環的警告消息?

種子的隨機數發生器 定義空的或1000元素向量,「樣本」,寫樣品裝置以 寫for循環來抽取1000個隨機樣本,N = 25,和寫意味着樣品來製備的載體

data <- as.vector(Nile) 

set.seed(123) 

sample1 <- vector() 

for(i in 1:1000){ 
    r <- vector() 
    r[i] <- data[sample(1:100,size=25,replace=1)] 
    sample1[i] <- mean(r[i]) 
} 

和我得到在我的輸出一個警告消息說:

Warning in r[i] <- data[sample(1:100, size = 25, replace = 1)]: number of items to replace is not a multiple of replacement length 

任何人都可以幫我嗎?

+0

因爲您正在分配矢量的矢量的r [I] <一個元件 - 數據[.....]'。你可以刪除整個'r'並計算'data [blah ...]的平均值 – Gopala

+0

作爲@Gopala的後續:你可以把它寫成'sample1 < - sapply(1:1000,function i){mean(data [sample(1:100,size = 25,replace = TRUE)])})' – ekstroem

回答

2

正如在評論中提到的那樣,問題在於您正在嘗試將向量添加到向量的元素中。尺寸不加起來。

在這種情況下的修復很簡單,就是刪除該步驟,因爲它是多餘的。一般而言,如果需要存儲多個載體可以這樣做,在一個矩陣中,數據幀或列表結構,這取決於如果載體是已知的長度,相同的長度,同一類等

data <- as.vector(Nile) 

set.seed(123) 

sample1 <- vector() 

for(i in 1:1000){ 
    d <- data[sample(1:100, size=25, replace=TRUE)] 
    sample1[i] <- mean(d) 
} 

的而不是使用一個for循環,在這種情況下,您可以使用replicate,這是lapply之間的相對關係。

set.seed(123) 

sample2 <- replicate(1000, mean(data[sample(1:100, size=25, replace=TRUE)])) 

# as you can see, the results are identical 
head(sample1); head(sample2) 
#[1] 920.16 915.12 925.96 919.36 859.36 928.96 
#[1] 920.16 915.12 925.96 919.36 859.36 928.96