使用 sample() 进行随机抽样会产生意想不到的结果
Random sampling with sample() gives unexpected results
在 R 中执行随机抽样时请考虑以下事项:
n <- 10
k <- 10
p <- 0.10 # proportion of the k objects to subsample
probs <- c(0.30, 0.30, 0.30, rep(0.10/7, 7)) # probabilities for each of the k objects
这里,n和k的作用无关;但是,有一个条件 n >= k.
x <- sort(sample(k, size = ceiling(p * k), replace = FALSE)) # works
y <- sample(x, size = n, replace = TRUE, prob = probs[x]) # throws error
我想知道为什么上面分配给 y 的函数调用会抛出错误。
我收到的错误是:
Error in sample.int(x, size, replace, prob) :
incorrect number of probabilities
我的想法是 sample() 的 'size' 参数(即 n*p)在第二个函数调用(y 变量)中无法计算为 1,但我一直无法找到在 sample() 的帮助文件中记录此错误的任何内容。
我知道 ceiling() 在某些情况下会表现得很奇怪,但我不认为这可能是问题所在。
当上述代码为运行时,x设置为整数数据类型,如1L、2L等,导致y计算出错
有人知道如何解决这个问题吗?
如果 x
是单个值,sample(x)
从值 1 到 x
(请参阅帮助的 Details
部分)或从 1 到 floor(x)
如果 x
不是整数。所以 prob
参数必须是长度为 x
的向量。在您的代码中 probs[x]
始终是长度为 1 的向量,这会导致错误。
在 R 中执行随机抽样时请考虑以下事项:
n <- 10
k <- 10
p <- 0.10 # proportion of the k objects to subsample
probs <- c(0.30, 0.30, 0.30, rep(0.10/7, 7)) # probabilities for each of the k objects
这里,n和k的作用无关;但是,有一个条件 n >= k.
x <- sort(sample(k, size = ceiling(p * k), replace = FALSE)) # works
y <- sample(x, size = n, replace = TRUE, prob = probs[x]) # throws error
我想知道为什么上面分配给 y 的函数调用会抛出错误。
我收到的错误是:
Error in sample.int(x, size, replace, prob) :
incorrect number of probabilities
我的想法是 sample() 的 'size' 参数(即 n*p)在第二个函数调用(y 变量)中无法计算为 1,但我一直无法找到在 sample() 的帮助文件中记录此错误的任何内容。
我知道 ceiling() 在某些情况下会表现得很奇怪,但我不认为这可能是问题所在。
当上述代码为运行时,x设置为整数数据类型,如1L、2L等,导致y计算出错
有人知道如何解决这个问题吗?
如果 x
是单个值,sample(x)
从值 1 到 x
(请参阅帮助的 Details
部分)或从 1 到 floor(x)
如果 x
不是整数。所以 prob
参数必须是长度为 x
的向量。在您的代码中 probs[x]
始终是长度为 1 的向量,这会导致错误。