Я хочу нарисовать случайные целые пары без замены (иначе говоря, я не хочу дублировать пары). Эта концепция звучит просто, но я не могу придумать быстрое и простое решение.Создание случайных пар целых чисел без замены в R
Представьте, например, что я хочу генерировать случайные пары целых чисел, используя последовательность целых чисел 1:4
, чтобы заполнить элементы пары. Также предположим, что я хочу сгенерировать 5 случайных пар без замены. Затем я хочу, чтобы иметь возможность создавать что-то вроде этого ...
[,1] [,2]
[1,] 1 2
[2,] 2 1
[3,] 3 3
[4,] 1 4
[5,] 4 3
В приведенном выше примере, нет повторяющихся пар (то есть строки). Однако в каждом столбце вышеуказанной матрицы есть повторяющиеся целые числа. Следовательно, использование sample()
для генерации случайного числа для каждого столбца отдельно не будет работать.
Другое потенциально возможное решение, которое не будет работать для моего контекста, состоит в том, чтобы генерировать многочисленные пары, которые включают дубликаты, а затем удалять эти дубликаты ретроактивно. Я не могу этого сделать, потому что мне нужно будет генерировать определенное количество пар.
Я ищу эффективное решение этой проблемы. Это кажется таким простым вопросом, он должен иметь простое решение (то есть, пожалуйста, не вложенный для петель)
Вот мой уродливый подход:
#This matrix maps a unique id i.e. (1:16) to a pair (i.e. the row & col of the matrix)
r.mat<-matrix(1:(4*4),4,4)
#Drawing a random id
r.id<-sample(r.mat,5,replace=FALSE)
#Mapping the random id to a random pair
r.pair<-t(sapply(r.id, function (x) which(r.mat==x,arr.ind=TRUE)))
Это будет работать нормально для моего игрушечного примера, но когда я хотите нарисовать большое количество пар из последовательности 1: 10000000, это не так здорово.
как вы получите {3,3} * без * замена – rawr
Точно насколько велика последовательность вы обдумываете рисовать каждое число от? Это действительно 1e7? – BrodieG
rawr - набор, который я, по существу, рисует из (1,1), (2,1), (1,2), (1,3), (1,4), (2,2) и т. Д. .. Поэтому без замены означает, что у меня никогда не будет двойной пары. Имеет ли это смысл? Любой совет о том, как изменить вопрос, чтобы он стал более понятным? –