Почему «sam <-sample (1: 1000,50) y <-x [sam]» не совпадает с «y <-x [sample (1: 1000,50)]»? - PullRequest
1 голос
/ 31 марта 2020

Это вызвало у меня много проблем, я потратил так много времени, пытаясь определить, где была моя ошибка, сравнивая два кода, и, похоже, ошибка была в этом небольшом различии:

Мой код

Xm <-x[sample(1:1000,50)]
Ym <-y[sample(1:1000,50)]

Код, с которым я сравнивал (и дает правильный результат):

extract<-sample(1:1000,50)

Xm <-x[extract]
Ym <-y[extract]

В моей голове это то же самое, что я не могу понять, в чем разница. Я надеюсь, что кто-то может мне помочь. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Ваш первый код будет работать, если вектор, из которого вы будете sh производить выборку, и размер выборки будет меньше или равен количеству элементов в x и y.

x <- rnorm(1500) 
y <- rnorm(1500)

# will work
smplVEC <- 1:1000  # sample from this vector
n.smpl <- 50       # sample size

length(smplVEC) <= length(x)
[1] TRUE
length(smplVEC) <= length(y)
[1] TRUE    
n.smpl <= length(x)
[1] TRUE
n.smpl <= length(y)
[1] TRUE

# no error returned
x[sample(smplVEC, n.smpl)] # x[sample(1:1000, 50)]
y[sample(smplVEC, n.smpl)] # y[sample(1:1000, 50)]


# will not work
smplVEC <- 1:2000  # sample from this vector
n.smpl <- 2500     # sample size

length(smplVEC) <= length(x)
[1] FALSE
length(smplVEC) <= length(y)
[1] FALSE    
n.smpl <= length(x)
[1] FALSE
n.smpl <= length(y)
[1] FALSE

# error returned
x[sample(smplVEC, n.smpl)] # x[sample(1:2000, 2500)]
y[sample(smplVEC, n.smpl)] # y[sample(1:2000, 2500)]
0 голосов
/ 31 марта 2020

Если мы хотим получить тот же вывод, укажите seed, и он должен дать тот же индекс

x <- 1:10
y <- 11:20
set.seed(24)
x[sample(1:10, 2)]
#[1] 7 3   #7th and 3rd element
set.seed(24)
y[sample(1:10, 2)]
#[1] 17 13 #7th and 3rd element

Однако было бы лучше создать объект, как во втором блоке кода OP ( 'экстракт')

0 голосов
/ 31 марта 2020

Потому что в первом примере вы дважды вызываете sample, что меняет индекс на подмножество.

Рассмотрим этот пример:

x <- 1:10
y <- 11:20
x[sample(1:10, 2)]
#[1] 10  9 #10th and 9th value got subsetted
y[sample(1:10, 2)]
#[1] 13 14 #3rd and 4th value got subsetted

, тогда как во втором примере вы вызываете sample только один раз и используете его для подмножества.

inds <- sample(1:10, 2)
x[inds]
#[1] 10  7 #10th and 7th value got subsetted
y[inds]
#[1] 20 17 #Same 10th and 7th value got subsetted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...