我有一个长度可变的向量,有时长度可能为1。我想从此向量采样,以便如果其长度为1,则始终采样该1个数字。sample() 将不会执行此操作,因为当样本大小为1时,它将从1采样到数字。
3 回答
森栏
TA贡献1810条经验 获得超5个赞
这是一个已记录的功能:
如果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会导致意外的结果?
温温酱
TA贡献1752条经验 获得超4个赞
您可以使用此“无错误”功能重新定义:
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 关注
- 541 浏览
添加回答
举报
0/150
提交
取消