2014-02-19 44 views
3

我注意到很多[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)下面的代碼片段。功能基本上採用數據矩陣,並且執行quantile normalization

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) 
} 

我在註釋添加*,看看這種模式發生。我很驚訝於相關算法的執行的簡潔性

+11

其所謂的回收利用。 –

+7

...... R稱之爲[回收](http://cran.r-project.org/doc/manuals/R-intro.html#The-recycling-rule),有些人認爲它很重要。 –

+8

...但我們不是那種。 –

回答

1

正如評論中提到的那樣,它被稱爲回收規則。

來自R簡介:發生在相同的表達

載體不必全部是相同的 長度。如果它們不是,則表達式的值是與表達式中出現的最長向量長度相同的向量。 表達式中較短的載體經常需要 (可能分數)回收,直到它們與最長的矢量長度相匹配。特別是重複一個常數。

檢查此鏈接R manual

相關問題