Есть ли название для этого "повторяющегося" поведения вектора в R?

Я заметил, что многие хакеры R делают что-то вроде этого:

> matrix(c(1,2,3,4,5),nrow=5,ncol=10,byrow=FALSE)
 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 1 1 1 1
[2,] 2 2 2 2 2 2 2 2 2 2
[3,] 3 3 3 3 3 3 3 3 3 3
[4,] 4 4 4 4 4 4 4 4 4 4
[5,] 5 5 5 5 5 5 5 5 5 5

В принципе, если размер вектора (в данном случае 5) короче размера "контейнера", в который он помещается, в этом случае матрица (размером 5 x 10 = 50), он будет повторяться до тех пор, пока он не заполнит контейнер. Я думаю, что это абсолютно опрятная особенность R, которая делает много R-кодов очень краткими. Есть ли имя для этого? и документацию об этом?

Я заметил этот шаблон из следующего фрагмента кода из (http://training.bioinformatics.ucdavis.edu/docs/2012/05/DAV/lectures/gene-expression-analysis/gene-expression-analysis.pdf). Функция в основном принимает матрицу данных и выполняет нормализацию квантилей

quan.norm<-function(x,quan=0.5){
 ##x: p by n data matrix, where columns are the samples.
 norm<-x
 p<-nrow(x)
 n<-ncol(x)
 x.sort<-apply(x, 2, sort) ## sort genes within a sample
 x.rank<-apply(x,2,rank) ## rank genes within a sample
 ## find the common distribution to be matched to:
 qant.sort<-matrix(apply(x.sort,1,quantile, probs=quan),
 + p,n,byrow=FALSE) #***<----- HERE ***
 ## match each sample to the common distribution:
 for (i in 1:n){
 norm[,i]<-qant.sort[x.rank[,i],i]
 }
 return(norm)
}

Я добавил * в комментарии, чтобы узнать, где этот шаблон. Я был в шоке от кратковременности реализации довольно сложного алгоритма

1 ответ

Как уже упоминалось в комментариях, это правило утилизации.

From R Intro:

Векторы, встречающиеся в одном выражении, не обязательно должны быть одинаковыми длина. Если это не так, значение выражения представляет собой вектор с той же длины, что и самый длинный вектор, который встречается в выражении. Более короткие векторы в выражении рециркулируются так часто, как нужно (возможно, дробно), пока они не совпадут с длиной самого длинного вектор. В частности, константа просто повторяется.

Отметьте эту ссылку R manual

licensed under cc by-sa 3.0 with attribution.