[R] help with function
Iain Gallagher
iaingallagher at btopenworld.com
Sat Dec 18 11:51:13 CET 2010
Ok - used browser to step through the function. Thanks for the nod towards that Chuck.
> tf2 <- cumulMetric(tf1, deMirs$up)
Called from: cumulMetric(tf1, deMirs$up)
Browse[1]> fcVector <- as.numeric(with (deMirs, FC[match(deMirPresGenes[,4], Probe)] ) )
Browse[1]> metric <- fcVector * as.numeric(deMirPresGenes[,11])
Browse[1]> geneMetric <- cbind(deMirPresGenes[,2], metric)
Browse[1]> ls()
[1] "deMirPresGenes" "deMirs" "fcVector" "geneMetric"
[5] "metric"
Browse[1]> listMetric <- unstack(geneMetric, as.numeric(geneMetric[,2])~geneMetric[,1])
Error in eval(expr, envir, enclos) : object 'geneMetric' not found
Browse[1]> ls()
[1] "deMirPresGenes" "deMirs" "fcVector" "geneMetric"
[5] "metric"
Browse[1]> head(geneMetric)
sym metric
[1,] "AAK1" "-0.35505"
[2,] "ABCA1" "-0.34979"
[3,] "ABCA2" "-1.0329"
[4,] "ABCB10" "-1.22558"
[5,] "ABCE1" "-0.61348"
[6,] "ABCF3" "-0.86584"
So geneMetric is there. It looks right but for some reason the call to unstack cannot find it. Yet if I go through this line by line but not as a function the call to unstack works fine:
> fcVector <- as.numeric(with (deMirs$up, FC[match(tf1[,4], Probe)] ) )
> metric <- fcVector * as.numeric(tf1[,11])
> geneMetric <- cbind(tf1[,2], metric)
> head(geneMetric)
metric
[1,] "AAK1" "-0.35505"
[2,] "ABCA1" "-0.34979"
[3,] "ABCA2" "-1.0329"
[4,] "ABCB10" "-1.22558"
[5,] "ABCE1" "-0.61348"
[6,] "ABCF3" "-0.86584"
> colnames(geneMetric) <- c('sym', 'metric')
> listMetric <- unstack(geneMetric, as.numeric(geneMetric[,2])~geneMetric[,1])
> head(listMetric)
$AAK1
[1] -0.35505
$ABCA1
[1] -0.34979
$ABCA2
[1] -1.0329
$ABCB10
[1] -1.22558
$ABCE1
[1] -0.61348
$ABCF3
[1] -0.86584
Any further advice would be much appreciated.
Thanks
i
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
[3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
[5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
[7] LC_PAPER=en_GB.utf8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
>
--- On Sat, 18/12/10, Charles C. Berry <cberry at tajo.ucsd.edu> wrote:
> From: Charles C. Berry <cberry at tajo.ucsd.edu>
> Subject: Re: [R] help with function
> To: "Iain Gallagher" <iaingallagher at btopenworld.com>
> Cc: r-help at r-project.org
> Date: Saturday, 18 December, 2010, 0:13
> On Fri, 17 Dec 2010, Iain Gallagher
> wrote:
>
> > Hello List
> >
> > I'm moving this over from the bioC list as, although
> the problem I'm working on is biological, the current bottle
> neck is my poor understanding of R.
> >
> > I wonder if someone would help me with the following
> function.
> >
>
> Here is how I'd take it apart.
>
> Either
>
> 1) put browser() as the first line of the
> function,then feed lines to the
> browser one -by-one to see where
> it hangs,
>
> 2) trace(cumulMetric) , then try to run it (much
> like 1, but it will
> handle feeding the lines of the
> function more easily)
>
> 3) options( error = recover ), then run it till it
> hits the error, then
> browser thru the frames to see
> what is where
>
> See
>
> ?browser
> ?trace
> ?recover
>
> as background.
>
> HTH,
>
> Chuck
>
> > cumulMetric <- function(deMirPresGenes, deMirs){
> >
> > #need to match position of each miR in deMirPresGenes
> with its FC to form a vector of FC in correct order
> > fc <- deMirs
> > fcVector <- as.numeric(with (fc,
> FC[match(deMirPresGenes[,4], Probe)] ) )
> >
> > #multiply fc by context score for each
> interaction
> > metric <- fcVector *
> as.numeric(deMirPresGenes[,11])
> > geneMetric <- cbind(deMirPresGenes[,2],
> as.numeric(metric))
> >
> > #make cumul weighted score
> > listMetric <- unstack(geneMetric,
> as.numeric(geneMetric[,2])~geneMetric[,1])
> > listMetric <-
> as.data.frame(sapply(listMetric,sum)) #returns a dataframe
> > colnames(listMetric) <- c('cumulMetric')
> >
> > #return whole list
> > return(listMetric)
> > }
> >
> > deMirPresGenes looks like this:
> >
> > Gene.ID Gene.Symbol Species.ID miRNA
> Site.type UTR_start UTR_end
> X3pairing_contr local_AU_contr position_contr
> context_score context_percentile
> > 22848 AAK1 9606 hsa-miR-183 2
> 1546 1552 -0.026 -0.047 0.099
> -0.135 47
> > 19 ABCA1 9606 hsa-miR-183 2
> 1366 1372 -0.011 -0.048 0.087
> -0.133 46
> > 20 ABCA2 9606 hsa-miR-495 2
> 666 672 -0.042 -0.092 -0.035
> -0.33 93
> > 23456 ABCB10 9606 hsa-miR-183 3
> 1475 1481 0.003 -0.109 -0.05
> -0.466 98
> > 6059 ABCE1 9606 hsa-miR-495 2
> 1474 1480 0.005 -0.046 0.006
> -0.196 58
> > 55324 ABCF3 9606 hsa-miR-1275 3
> 90 96 0.007 0.042 -0.055
> -0.316 94
> >
> > although it is much longer in 'real life'.
> >
> > The aim of the function is to extract a dataframe of
> gene symbols along with a weighted score from the above
> data. The weighted score is the FC column of deMirs * the
> context_score column of deMirPresGenes. This is easy peasy!
> >
> > Where I'm falling down is that if I run this function
> it complains that 'geneMetric' can't be found. Hmm - I've
> run it all line by line (i.e. not as a function) and it
> works but wrapped up like this it fails!
> >
> > e.g.
> >
> >> testF2 <- cumulMetric(testF1, deMirs$up)
> > Error in eval(expr, envir, enclos) : object
> 'geneMetric' not found
> >
> > deMirs$up looks like this:
> >
> > Probe FC
> > hsa-miR-183 2.63
> > hsa-miR-1275 2.74
> > hsa-miR-495 3.13
> > hsa-miR-886-3p 3.73
> > hsa-miR-886-5p 3.97
> > hsa-miR-144* 6.62
> > hsa-miR-451 7.94
> >
> > In an effort to debug this I have examined each object
> using 'print' statements (as suggested by cstrato on the
> bioC list).
> >
> > All the objects in the function up until listMetric
> look ok in terms of structure and length. But the error
> persists and listMetric is not made?!?! Odd.
> >
> > I have added some comments to the output below.
> >
> >> tf2<-cumulMetric(tf1, deMirs$up)#deMirs$up is a
> dataframe (see above - it is the same as deMirs)
> >
> >
> > [1] 2.63 2.63 3.13 2.63 3.13 2.74 # print fcVector -
> looks ok
> > [1] -0.35505 -0.34979 -1.03290 -1.22558 -0.61348
> -0.86584 # print metric - looks ok
> > [1] 1045 # length of metric - is correct
> > sym metric # print geneMetric -
> looks ok
> > [1,] "AAK1" "-0.35505"
> > [2,] "ABCA1" "-0.34979"
> > [3,] "ABCA2" "-1.0329"
> > [4,] "ABCB10" "-1.22558"
> > [5,] "ABCE1" "-0.61348"
> > [6,] "ABCF3" "-0.86584"
> > [1] 1045 # nrow of geneMetric - is correct
> > Error in eval(expr, envir, enclos) : object
> 'geneMetric' not found
> >>
> >
> > Could someone possibly point out where I falling
> down.
> >
> > Thanks
> >
> > iain
> >
> >> sessionInfo()
> > R version 2.12.0 (2010-10-15)
> > Platform: x86_64-pc-linux-gnu (64-bit)
> >
> > locale:
> > [1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
>
> > [3] LC_TIME=en_GB.utf8
> LC_COLLATE=en_GB.utf8
> > [5] LC_MONETARY=C
> LC_MESSAGES=en_GB.utf8
> > [7] LC_PAPER=en_GB.utf8 LC_NAME=C
>
> > [9] LC_ADDRESS=C LC_TELEPHONE=C
>
> > [11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
>
> >
> > attached base packages:
> > [1] stats graphics grDevices utils
> datasets methods base
> >
> > loaded via a namespace (and not attached):
> > [1] tools_2.12.0
> >>
> >
> >
> >
> > ______________________________________________
> > 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.
> >
>
> Charles C. Berry
> Dept
> of Family/Preventive Medicine
> cberry at tajo.ucsd.edu
> UC San
> Diego
> http://famprevmed.ucsd.edu/faculty/cberry/ La
> Jolla, San Diego 92093-0901
>
>
More information about the R-help
mailing list