長さが可変のベクトルがあり、長さが 1 の場合もあります。
長さが1の場合、常にその1つの数値をサンプリングするように、このベクトルからサンプリングしたいと思います。
sample()
サンプルサイズが1の場合、1から桁までサンプリングするため、これは行いません。
長さが可変のベクトルがあり、長さが 1 の場合もあります。
長さが1の場合、常にその1つの数値をサンプリングするように、このベクトルからサンプリングしたいと思います。
sample()
サンプルサイズが1の場合、1から桁までサンプリングするため、これは行いません。
これは文書化された機能です:
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 を使用すると意図しない結果が生じるのはいつですか?
単一の数値のみが与えられた場合、( を参照)sample
のように機能します。指定したベクトルからのみサンプリングするようにしたい場合は、インデックスを操作して次の構成を使用できます。sample.int
?sample
x[sample(length(x))]
これにより、 の長さに関係なく、長さをチェックする -conditionx
を追加する必要なく、正しい結果が得られます。if
例:
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
、sample.int
速度が少し向上します。