У меня есть набор данных с 20 строками и n столбцами. Первоначально я работал с n = 10000, но обнаружил, что мне нужно использовать гораздо большее число, возможно, в десять раз больше. Каждый столбец этого набора данных генерируется независимо от других и содержит случайную, но смещенную перестановку целых чисел от 1 до 20. I sh для суммирования местоположений каждого числа по всему набору данных. Другими словами, я хочу знать, сколько раз число a появлялось в b-й позиции для каждых a и b (т.е. мой конечный результат - таблица значений 20 * 20).
Я уверен, что я уже есть код, который достигает этой цели. Например, мой компьютер обрабатывает всю причину n = 10000 менее чем за две минуты (т.е. он дает мне счетчик для каждого a и b). Однако и n = 100000, и меньшее n = 50000 заняли так много времени, что мое терпение иссякло. Большая часть моего кода чрезвычайно проста, и я уверен, что неэффективность заключается в использовании match
в следующих строках (a
, b
и n
, как описано выше, data
- это набор данных):
list<-c()
for(k in 1:n)
{
position<-match(a, data[,k])
list<-c(list,position)
}
return(sum(list==b))
как я могу улучшить это? match
кажется очень медленным , но все решения, которые я видел ( пример ), не являются ни общим решением, ни применимым к этому случаю.
Если вы будете sh для сравнения своего решения replicate(n,sample(20))
создаст список, аналогичный моему набору данных.