的矢量I有具有不同長度的矢量,這有時可以是長度爲1採樣中的R從不同長度
我想從這個載體樣品,使得如果它的長度是1個它總是樣品那1號碼。當樣本大小是
樣品()將無法做到這一點,因爲它的樣品從1到數字1.
的矢量I有具有不同長度的矢量,這有時可以是長度爲1採樣中的R從不同長度
我想從這個載體樣品,使得如果它的長度是1個它總是樣品那1號碼。當樣本大小是
樣品()將無法做到這一點,因爲它的樣品從1到數字1.
這是一個記錄特徵:
如果
x
具有長度1
,是numeric
(在is.numeric
的意義上)和x >= 1
,通過樣品採樣從1: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 vs seq_along. When will using seq cause unintended results?
我們明顯在同一時刻發佈了相同的答案。因此,我將我的答案提到了另一個相同的問題,並投票決定將這兩個問題合併。 –
謝謝@Joris。我認爲我的答案比你的答案多一點,所以如果你同意,可以隨時打撈。我寧願關閉較新的一個,但我不知道在這種情況下是否有一項政策。 – flodel
我已經upvoted你:)。我標記了合併的問題,所以當這種情況發生時,所有的答案都加在一起。我打算關閉另一個,但顯然我在錯誤的窗口中點擊了「投票結束」。我的錯誤,對不起。 –
下上市的時候只喂一個單號,sample
作品像sample.int
(見?sample
)。如果你想從你給它的載體確保它只有樣品,你可以使用索引工作,並使用此結構:
x[sample(length(x))]
這給你正確的結果的x
無論長度,而無需添加一個if
-condition檢查長度。
例子:
mylist <- list(
a = 5,
b = c(2,4),
d = integer(0)
)
mysample <- lapply(mylist,function(x) x[sample(length(x))])
> mysample
$a
[1] 5
$b
[1] 2 4
$d
integer(0)
注意:您可以通過sample.int
代替sample
變得有點速度增益。
+1是迄今爲止最優雅的解決方案。 – Thilo
這個問題的答案是'sample'的幫助文件,請參閱'sample'並仔細閱讀'Details'部分,在這裏您可以找到'If x長度爲1,是數字(在is的意義上。數字)和x> = 1,通過採樣採樣發生在1:x.' –
,並有任何方式操作系統使它只採樣該單一值? – user1723765