Entering edit mode
Hi Christian,
Christian Kohler wrote:
> Hi Jim, hi Herve,
>
> thank you both for replying on my question.
> Please find below a simple code snippet that was run with R/Bioc
> (2.8.1/2.3) and (2.9.0/2.4) and reproduces my error.
What you are calling BioC 2.3 isn't the release version. You have a
version of AnnotationDbi that was devel somewhere between 2.2 and 2.3,
but had been updated to 1.4.3 by release.
> The first example (on the mailinglist) was a bad one (sorry Jim).
> As I mentioned, the error first appeared with the latest releases
and
> causes the pipeline to break.
>
> Jim already suggested on how to proceed and I will follow that but
can
> you nevertheless tell me the background for this error?
> Have there been changes in the annotation packages? This information
> would help me to investigate and check the remaining pipeline-code.
So to answer your question, the change that affects you here wasn't
made
to the annotation packages, but to the AnnotationDbi package. There is
a
function called .checkKeysAreWellFormed() that, well, checks to see
that
keys used for lookup are well formed (e.g, there are no NA or NULL
values and all keys are character), and more importantly returns an
error message that clearly states what the problem was.
The second point is more important than the first, as obscure error
messages tend to eliminate all possibility that end users might be
able
to self-diagnose their problem.
Best,
Jim
>
> Again, I very much appreciate your help.
>
> Best,
> Christian
>
>
>
> #####################
> ## R(2.8.1) and BioC(2.3) ##
> #####################
>
> options(error=recover)
> rm(list=ls(all=TRUE))
>
> x<-"209569_x_at"
> is.upreg<-as.logical(c(0,0,1,1)) ## logical-vector as result from
some
> prior calculation
> x.up<-x[is.upreg]
> x.down<-x[!is.upreg]
> library(hgu133plus2.db)
> up.out<-unique(unlist(mget(x.up,env=hgu133plus2ENTREZID,ifnotfound=N
A)))
> [1] NA
> down.out<-unique(unlist(mget(x.down,env=hgu133plus2ENTREZID,ifnotfou
nd=NA)))
> [1] "27065" NA
>
> sessionInfo()
> R version 2.8.1 (2008-12-22)
> i686-pc-linux-gnu
>
> locale:
> C
>
> attached base packages:
> [1] tools stats graphics grDevices datasets utils
methods
> [8] base
>
> other attached packages:
> [1] hgu133plus2.db_2.2.5 RSQLite_0.7-0 DBI_0.2-4
> [4] AnnotationDbi_1.3.15 Biobase_2.1.7 R.utils_1.0.1
> [7] R.oo_1.4.5 R.methodsS3_1.0.3
>
> ####################################################################
>
> #####################
> ## R(2.9.0) and BioC(2.4) ##
> #####################
> options(error=recover)
> rm(list=ls(all=TRUE))
>
> x<-"209569_x_at"
> is.upreg<-as.logical(c(0,0,1,1)) ## logical-vector as result from
some
> prior calculation
> x.up<-x[is.upreg]
> x.down<-x[!is.upreg]
> library(hgu133plus2.db)
> up.out<-unique(unlist(mget(x.up,env=hgu133plus2ENTREZID,ifnotfound=N
A)))
> Error in .checkKeysAreWellFormed(keys) :
> keys must be supplied in a character vector with no NAs
>
> Enter a frame number, or 0 to exit
>
> 1: unique(unlist(mget(x.up, env = hgu133plus2ENTREZID, ifnotfound =
NA)))
> 2: unlist(mget(x.up, env = hgu133plus2ENTREZID, ifnotfound = NA))
> 3: mget(x.up, env = hgu133plus2ENTREZID, ifnotfound = NA)
> 4: mget(x.up, env = hgu133plus2ENTREZID, ifnotfound = NA)
> 5: `keys<-`(`*tmp*`, value = c(NA, NA))
> 6: `keys<-`(`*tmp*`, value = c(NA, NA))
> 7: switch(as.character(direction(x)), `1` = `Lkeys<-`(x, value),
`-1` =
> `Rkeys
> 8: `Lkeys<-`(x, value)
> 9: `Lkeys<-`(x, value)
> 10: .checkKeys(value, Lkeys(x), x at ifnotfound)
> 11: .checkKeysAreWellFormed(keys)
>
> down.out<-unique(unlist(mget(x.down,env=hgu133plus2ENTREZID,ifnotfou
nd=NA)))
> Error in .checkKeysAreWellFormed(keys) :
> keys must be supplied in a character vector with no NAs
>
> Enter a frame number, or 0 to exit
>
> 1: unique(unlist(mget(x.down, env = hgu133plus2ENTREZID, ifnotfound
= NA)))
> 2: unlist(mget(x.down, env = hgu133plus2ENTREZID, ifnotfound = NA))
> 3: mget(x.down, env = hgu133plus2ENTREZID, ifnotfound = NA)
> 4: mget(x.down, env = hgu133plus2ENTREZID, ifnotfound = NA)
> 5: `keys<-`(`*tmp*`, value = c("209569_x_at", NA))
> 6: `keys<-`(`*tmp*`, value = c("209569_x_at", NA))
> 7: switch(as.character(direction(x)), `1` = `Lkeys<-`(x, value),
`-1` =
> `Rkeys
> 8: `Lkeys<-`(x, value)
> 9: `Lkeys<-`(x, value)
> 10: .checkKeys(value, Lkeys(x), x at ifnotfound)
> 11: .checkKeysAreWellFormed(keys)
>
> ## sessionInfo()
> R version 2.9.0 (2009-04-17)
> i686-pc-linux-gnu
>
> locale:
> C
>
> attached base packages:
> [1] stats graphics grDevices datasets utils methods base
>
> other attached packages:
> [1] hgu133plus2.db_2.2.11 RSQLite_0.7-1 DBI_0.2-4
> [4] AnnotationDbi_1.6.0 Biobase_2.4.0 R.utils_1.1.1
> [7] R.oo_1.4.6 R.methodsS3_1.0.3
>
>
> James W. MacDonald wrote:
>> Hi Christian,
>>
>> Christian Kohler wrote:
>>> DeaR bioconductors,
>>>
>>> we run an internal microarray analysis pipeline and switched today
from
>>> R/BioC (2.8.1/2.3) to 2.9/2.4.
>>> After running some test code, I came across the following error:
>>>
>>> testCode:
>>>> x<-rep(NA,10)
>>>> unique(unlist(mget(x, env=hgu133plus2ENTREZID,ifnotfound=NA)))
>>>
>>> when I run this code snippet with 2.8.1/2.3 the corresponding
return
>>> value is
>>>> [1] NA
>> Really?
>>
>>> x <- rep(NA, 10)
>>> mget(x, hgu95av2ENTREZID)
>> Error in .checkKeysAreWellFormed(keys) :
>> keys must be supplied in a character vector with no NAs
>>> sessionInfo()
>> R version 2.8.1 (2008-12-22)
>> i386-pc-mingw32
>>
>> locale:
>> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
>> States.1252;LC_MONETARY=English_United
>> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>>
>> attached base packages:
>> [1] tools stats graphics grDevices datasets utils
methods
>> [8] base
>>
>> other attached packages:
>> [1] hgu95av2.db_2.2.5 RSQLite_0.7-1 DBI_0.2-4
>> [4] AnnotationDbi_1.4.3 Biobase_2.2.2
>>
>>
>>> but with 2.9/2.4 I got the following error:
>>>> Error during wrapup: keys must be supplied in a character vector
with
>>> no NAs
>>>
>>> This causes our pipeline to break there and stop the analysis
while in
>>> the previous case the analysis still continued with NA values.
>>>
>>> Please do not think that I am a picky person, but was there any
urgent
>>> need to change the behaviour of mget()?
>>> Is it possible to somehow bypass this?
>> The easiest way is to strip the NA values, using the canonical
>>
>> x <- x[!is.na(x)]
>>
>> Best,
>>
>> Jim
>>
>>
>>>
>>> Thanks a lot for any help.
>>>
>>> Christian
>>>
>>>
>>>
>
>
--
James W. MacDonald, M.S.
Biostatistician
Douglas Lab
University of Michigan
Department of Human Genetics
5912 Buhl
1241 E. Catherine St.
Ann Arbor MI 48109-5618
734-615-7826