我有一個長度可變的向量,有時長度可能為1。我想從此向量采樣,以便如果其長度為1,則始終采樣該1個數字。sample() 將不會執行此操作,因為當樣本大小為1時,它將從1采樣到數字。
3 回答

慕容708150
TA貢獻1831條經驗 獲得超4個贊
這是一個已記錄的功能:
如果x具有長度1,則是numeric(在is.numeric)上,并且x >= 1通過采樣從進行1:x。請注意,當x呼叫的長度不同時,此便利功能可能導致不良行為sample(x)。
一種替代方法是編寫您自己的函數來避免該功能:
sample.vec <- function(x, ...) x[sample(length(x), ...)]
sample.vec(10)
# [1] 10
sample.vec(10, 3, replace = TRUE)
# [1] 10 10 10
seq與seq_along下列出了一些具有類似行為的函數。何時使用seq會導致意外的結果?

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
您可以使用此“無錯誤”功能重新定義:
sample = function(x, size, replace = F, prob = NULL) {
if (length(x) == 1) return(x)
base::sample(x, size = size, replace = replace, prob = prob)
}
測試一下:
> sapply(1:7, base::sample, size = 1)
[1] 1 2 2 4 4 4 4
> sapply(1:7, sample)
[1] 1 2 3 4 5 6 7
- 3 回答
- 0 關注
- 613 瀏覽
添加回答
舉報
0/150
提交
取消