猿问

来自不同长度向量的样本(包括1个)

我有一个长度可变的向量,有时长度可能为1。

我想从此向量采样,以便如果其长度为1,则始终采样该1个数字。

sample() 将不会执行此操作,因为当样本大小为1时,它将从1采样到数字。


长风秋雁
浏览 577回答 3
3回答

慕容708150

这是一个已记录的功能:如果x具有长度1,则是numeric(在is.numeric)上,并且x >= 1通过采样从进行1:x。请注意,当x呼叫的长度不同时,此便利功能可能导致不良行为sample(x)。一种替代方法是编写您自己的函数来避免该功能:sample.vec <- function(x, ...) x[sample(length(x), ...)]sample.vec(10)# [1] 10sample.vec(10, 3, replace = TRUE)# [1] 10 10 10seq与seq_along下列出了一些具有类似行为的函数。何时使用seq会导致意外的结果?

Smart猫小萌

您可以使用此“无错误”功能重新定义:sample = function(x, size, replace = F, prob = NULL) {&nbsp; if (length(x) == 1) return(x)&nbsp; 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
随时随地看视频慕课网APP
我要回答