为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

智慧大石 2019-12-05 16:07:04
我有一个长度可变的向量,有时长度可能为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会导致意外的结果?


查看完整回答
反对 回复 2019-12-05
?
温温酱

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


查看完整回答
反对 回复 2019-12-05
  • 3 回答
  • 0 关注
  • 541 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信