Как выбрать случайный вектор - PullRequest
1 голос
/ 24 февраля 2020

У меня есть 4 вектора, которые содержат целые числа.

Я хочу выполнить вычисления на основе 2 векторов, выбранных случайным образом.

Я попытался создать новый вектор, содержащий все векторы, но sample() дает мне только первый элемент каждого вектора.

Мои векторы, если это поможет:

A <- c(4, 4, 4, 4, 0, 0)
B <- c(3, 3, 3, 3, 3, 3)
C <- c(6, 6, 2, 2, 2, 2)
D <- c(5, 5, 5, 1, 1, 1)

Требуемый вывод, например: A, B или B, D или D, A et c.

Тысяча благодарностей заранее!

Ответы [ 3 ]

4 голосов
/ 24 февраля 2020

Это проще сделать, если вы храните свои векторы в списке:

vecs <- list(
  A = c(4, 4, 4, 4, 0, 0),
  B = c(3, 3, 3, 3, 3, 3),
  C = c(6, 6, 2, 2, 2, 2),
  D = c(5, 5, 5, 1, 1, 1)
)

idx <- sample(1:length(vecs), 2, replace = F)

sampled <- vecs[idx]

sampled

$D
[1] 5 5 5 1 1 1

$B
[1] 3 3 3 3 3 3

После этого вы можете получить доступ к двум выбранным векторам независимо от их имен с помощью sampled[[1]] и sampled[[2]].

3 голосов
/ 24 февраля 2020

Сначала вам нужно составить или , на котором вы можете сделать sample(). size= говорит о количестве векторов, которые вы хотите в каждой выборке, что здесь составляет 2.

LIST

> LIST <- list(A, B, C, D) 
> sample(LIST, size = 2)
[[1]]
[1] 3 3 3 3 3 3

[[2]]
[1] 4 4 4 4 0 0

Фрейм данных

> df <- data.frame(A, B, C, D)
> sample(df, size = 2)
  B C
1 3 6
2 3 6
3 3 2
4 3 2
5 3 2
6 3 2

Я думаю, вы пробовали не тот объект.

1 голос
/ 24 февраля 2020

Составьте список:

LIST = list(A,B,C,D)
names(LIST) = c("A","B","C","D")

Это даст вам выборку из списка 2

sample(LIST,2)

Чтобы добавить их, например, выполните:

Reduce("+",sample(LIST,2))
...