[R] matrix indexing in 'for' loop?
Liviu Andronic
landronimirc at gmail.com
Wed Dec 22 11:35:16 CET 2010
On Wed, Dec 22, 2010 at 2:57 AM, Phil Spector <spector at stat.berkeley.edu> wrote:
> To make your loop work, you need to learn about the get function.
> I'm not going to give you the details because there are better
> approaches available.
> First, let's make some data that will give values which can be verified.
> (All the correlations of the data you created
> are exactly equal to 1.) And to make the code readable, I'll
> omit the ts.m prefix.
>
>> set.seed(14)
>> dmi = matrix(rnorm(20),4,5)
>> soi = matrix(rnorm(20),4,5)
>> pe = matrix(rnorm(20),4,5)
>> allmats = list(dmi,soi,pe)
>
> Since cor.test won't automatically do the tests for all columns
> of a matrix, I'll write a little helper function:
>
>> gettests = function(x)apply(x,2,function(col)cor.test(pe[,2],col)
>> tests = lapply(allmats,gettests)
>
> Now tests is a list of length 2, with a list of the output from
> cor.test for the five columns of the each matrix with pe[,2]
> (Notice that in your program you made no provision to store the results
> anywhere.)
>
> Suppose you want the correlations:
>
>> sapply(tests,function(x)sapply(x,function(test)test$estimate))
>
> [,1] [,2]
> cor 0.12723615 0.1342751
> cor 0.07067819 0.6228158
> cor -0.28761533 0.6218661
> cor 0.83731828 -0.9602551
> cor -0.36050836 0.1170035
>
> The probabilities for the tests can be found similarly:
>
>> sapply(tests,function(x)sapply(x,function(test)test$p.value))
>
> [,1] [,2]
> [1,] 0.8727638 0.86572490
> [2,] 0.9293218 0.37718416
> [3,] 0.7123847 0.37813388
> [4,] 0.1626817 0.03974489
> [5,] 0.6394916 0.88299648
>
Hmisc already provides a function for doing this, rcorr(). Try to
compute correlations using Rcmdr for an example.
Regards
Liviu
> (Take a look at the "Values" section in the help file for cor.test
> to get the names of other quantities of interest.)
>
> The main advantage to this approach is that if you add more matrices
> to the allmats list, the other steps automaticall take it into account.
>
> Hope this helps.
> - Phil Spector
> Statistical Computing Facility
> Department of Statistics
> UC Berkeley
> spector at stat.berkeley.edu
>
>
>
>
>
> On Tue, 21 Dec 2010, govindas at msu.edu wrote:
>
>>
>>
>> Hi,
>>
>> I am having trouble with matrices. I?have 2 matrices as given below, and I
>> am interested in using these matrices inside "for" loops used to calculate
>> correlations. I am creating a list with the names of the matrices assuming
>> this list could be indexed inside the 'for' loop to retrieve the matrix
>> values. But, as expected the code throws out an error. Can someone suggest a
>> better way to call these matrices inside the loops?
>>
>> ts.m.dmi <- matrix(c(1:20), 4, 5)
>> ts.m.soi <- matrix(c(21:40), 4, 5)
>> ts.m.pe <- matrix(c(21:40), 4, 5)
>>
>> factors <- c("ts.m.dmi", "ts.m.soi")
>> for (j in 0:1){
>> y <- factors[j+1]
>>
>> for (i in 1:5){
>>
>> cor.pe.y <- cor(ts.m.pe[,2], y[,i])
>> ct.tst <- cor.test(ts.m.pe[,2], y[,i])
>> }
>> }
>>
>> Thanks for your time.
>>
>> --
>> Regards,
>> Maha
>> Graduate Student
>> [[alternative HTML version deleted]]
>>
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
--
Do you know how to read?
http://www.alienetworks.com/srtest.cfm
http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
Do you know how to write?
http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail
More information about the R-help
mailing list