Мотивация: В настоящее время я пытаюсь переосмыслить свое кодирование, чтобы исключить возможность петель, где это возможно. Следующая проблема может быть легко решена с помощью обычных for-loops, но мне было интересно, дает ли R возможность использовать семейство приложений для облегчения проблемы.Повторное подмножество одной и той же матрицы, применяемое в R
Проблема: У меня есть матрица, скажем X
(n x k
матрица) и две матрицы пуска и останова индексов, называется index.starts
и index.stops
соответственно. Они имеют размер n x B
и содержат это значение index.stops = index.starts + m
для некоторого целого числа m
. Каждая пара index.starts[i,j]
и index.stops[i,j]
необходимы для подмножества X
как X[ (index.starts[i,j]:index.stops[i,j]),]
. I.e., они должны выбрать все строки X
в своем диапазоне индексов. Могу ли я решить эту проблему, используя одну из применяемых функций?
Приложение: (Не обязательно важно для понимания моей проблемы.) В случае, если вас это интересует, это необходимо для приложения для начальной загрузки с блоками в приложении временных рядов. Исходный образец представляет X
. index.starts
отбирается как replicate(repetitionNumber, sample.int((n-r), ceiling(n/r), replace=TRUE))
и index.stops
получается как index.stop = index.starts + m
. В конце концов я хочу собрать ряд из X
. В частности, я хочу переделать repetitionNumber
раз m
блоки длиной r
от X
.
Пример:
#generate data
n<-100 #the size of your sample
B<-5 #the number of columns for index.starts and index.stops
#and equivalently the number of block bootstraps to sample
k<-2 #the number of variables in X
X<-matrix(rnorm(n*k), nrow=n, ncol = k)
#take a random sample of the indices 1:100 to get index.starts
r<-10 #this is the block length
#get a sample of the indices 1:(n-r), and get ceiling(n/r) of these
#(for n=100 and r=10, ceiling(n/r) = n/r = 10). Replicate this B times
index.starts<-replicate(B, sample.int((n-r), ceiling(n/r), replace=TRUE))
index.stops<-index.starts + r
#Now can I use apply-functions to extract the r subsequent rows that are
#paired in index.starts[i,j] and index.stops[i,j] for i = 1,2,...,10 = ceiling(n/r) and
#j=1,2,3,4,5=B ?
Можете ли вы дать минимальный рабочий пример с некоторыми (поддельными) данными, например, для n = 3 и k = 4 или что-то вроде этого? Делает это легче понять и решить ... – David
Эй, Дэвид, надеюсь, это поможет вам! –
Возможно, вам нужно «Map («: », index.starts, index.stops)' и подмножество «X» соответственно? –