[R] create a function with "subset" statement

Karim Mezhoud kmezhoud at gmail.com
Wed Jan 28 21:43:47 CET 2015


Hi,
You did the harder, it remains the easier

listMatrices <- vector("list", 3)

doAll <- function(A){
B <- subset(A, (A[,1] %in% c(1,2) & A[,2] %in% c(1,2)) |
                      (A[,1] %in% c(3)    & A[,2] %in% c(1)  )  |
                      (A[,1] %in% c(4)    & A[,2] %in% c(1:4)) )

C <- subset(A, (A[,1] %in% c(1:4) & A[,2] %in% c(1,2)) )

D <- subset(A, (A[,1] %in% c(1,2) & A[,2] %in% c(1:3)) |
                      (A[,1] %in% c(3)    & A[,2] %in% c(1,2)) )

return(B)
}

B<- doAll(A)


verify if you can:

 return(c(B,C,D)).

listMatrices <- doAll(A)

Karim

  Ô__
 c/ /'_;~~~~kmezhoud
(*) \(*)   ⴽⴰⵔⵉⵎ  ⵎⴻⵣⵀⵓⴷ
http://bioinformatics.tn/



On Wed, Jan 28, 2015 at 8:54 PM, Kathryn Lord <kathryn.lord2000 at gmail.com>
wrote:

> Dear R experts,
>
> Suppose I have a matrix A below.
>
> a <- rep(1:4, each=5)
> b <- rep(1:5, 4)
> c <- rnorm(20)
>
> A <- cbind(a,b,c)
>
> > A
>       a b            c
>  [1,] 1 1  0.761806718
>  [2,] 1 2  0.239734573
>  [3,] 1 3 -0.728339238
>  [4,] 1 4 -0.121946174
>  [5,] 1 5 -0.131909077
>  [6,] 2 1 -0.069790098
>  [7,] 2 2  1.082671767
>  [8,] 2 3 -0.869537195
>  [9,] 2 4 -0.417222758
> [10,] 2 5 -2.432273481
> [11,] 3 1  0.425432121
> [12,] 3 2 -2.453299938
> [13,] 3 3  0.612125174
> [14,] 3 4 -0.005387462
> [15,] 3 5  1.911146222
> [16,] 4 1  0.161408685
> [17,] 4 2  0.567118882
> [18,] 4 3 -0.948882839
> [19,] 4 4  0.485002340
> [20,] 4 5 -0.551981333
>
>
> With this matrix A, I'd like to create several sub-matrices, for example
>
>
> B <- subset(A, (A[,1] %in% c(1,2) & A[,2] %in% c(1,2)) |
>                       (A[,1] %in% c(3)    & A[,2] %in% c(1)  )  |
>                       (A[,1] %in% c(4)    & A[,2] %in% c(1:4)) )
>
> > B
>       a b          c
>  [1,] 1 1  0.7618067
>  [2,] 1 2  0.2397346
>  [3,] 2 1 -0.0697901
>  [4,] 2 2  1.0826718
>  [5,] 3 1  0.4254321
>  [6,] 4 1  0.1614087
>  [7,] 4 2  0.5671189
>  [8,] 4 3 -0.9488828
>  [9,] 4 4  0.4850023
>
>
> or
>
> C <- subset(A, (A[,1] %in% c(1:4) & A[,2] %in% c(1,2)) )
>
> > C
>      a b          c
> [1,] 1 1  0.7618067
> [2,] 1 2  0.2397346
> [3,] 2 1 -0.0697901
> [4,] 2 2  1.0826718
> [5,] 3 1  0.4254321
> [6,] 3 2 -2.4532999
> [7,] 4 1  0.1614087
> [8,] 4 2  0.5671189
>
>
> or
>
> D <- subset(A, (A[,1] %in% c(1,2) & A[,2] %in% c(1:3)) |
>                       (A[,1] %in% c(3)    & A[,2] %in% c(1,2)) )
>
> > D
>      a b          c
> [1,] 1 1  0.7618067
> [2,] 1 2  0.2397346
> [3,] 1 3 -0.7283392
> [4,] 2 1 -0.0697901
> [5,] 2 2  1.0826718
> [6,] 2 3 -0.8695372
> [7,] 3 1  0.4254321
> [8,] 3 2 -2.4532999
>
> and so forth.
>
> I am wondering if I could create matrices B, C, D etc AT ONE TIME. In order
> to do that, I guess I need to make a "function". unfortunately, I have no
> idea how to do that.
>
> Any suggestion will be greatly appreciated.
>
> Kathryn Lord
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list