2017-08-03 83 views
1
> sample(c(2), 10, replace = TRUE, prob = 1) 
Error in sample.int(x, size, replace, prob) : 
    incorrect number of probabilities 
> sample(c(1), 10, replace = TRUE, prob = 1) 
[1] 1 1 1 1 1 1 1 1 1 1 

指定概率在第一個例子的麻煩,我想採樣向量2十次,以更換,每個概率= 1我期望的輸出是2 2 2 2 2 2 2 2 2 2R:與樣本函數

但是,它似乎與1的矢量工作?

回答

7

嘗試刪除prob = 1,你會得到什麼?

> set.seed(123) 
> sample(c(2), 10, replace = TRUE) 
# [1] 1 2 1 2 2 1 2 2 2 1 

help(sample)

用法

sample(x, size, replace = FALSE, prob = NULL)

如果x具有長度1,是數字(在is.numeric的意義上)且x> = 1, 通過樣品採樣從1:x進行。請注意,如果 調用(如樣本(x))中的x長度不等時,此功能 功能可能會導致不希望的行爲。看例子。

因此,它是從1:2而不是2抽樣。

+0

如果由於某種原因您仍然想要包含'prob',您可以執行以下操作:'x < - 2'然後'sample(x,10,replace = TRUE,prob = c(rep(0,x -1),1))' –

+0

'sample(2,10,replace = TRUE,prob = c(0,1))'。我想這是你想寫的。 – Onyambu

+0

Dave的解決方案適用於任何整數。例如,如果'x'爲3,則當Dave的解決方案爲您處理時,您需要手動將'prob'更改爲'c(0,0,1)'。然而,我認爲主要的問題是如果'x'是一個長度爲1的數字,那麼OP沒有意識到'sample'將從'1:x'中抽樣。可能更容易將它們濾除並使用'rep ',如果length(x)> 1',則只應用'sample',這取決於當x是單個值時所需的解決方案。 –