[BioC] genefilter problem
Wayne Xu
wxu at msi.umn.edu
Wed Mar 18 22:31:39 CET 2009
Thanks Martin,
It is very helpful,
Wayne
--
Martin Morgan wrote:
> Hi Wayne --
>
> Wayne Xu <wxu at msi.umn.edu> writes:
>
>
>> Hello,
>>
>> I created a filter function to filter the microarray data set by row
>> variance, but got follow error:
>>
>> > dim(data1)
>> [1] 7129 38
>> > data1[1,2:4]
>> data[, 4] data[, 6] data[, 8]
>> 1 -139 -76 -135
>>
>>
>> > myfilter<-function(j){
>> + function(x){
>> + rowVars(x)<j
>> + }
>> + }
>> >
>> > ff<-filterfun(myfilter(20))
>> > filt<-genefilter(data1,ff)
>> Error in rowSums(!is.na(x)) :
>> 'x' must be an array of at least two dimensions
>>
>
> genefilter feeds the filter function each row as a simple vector, so
> try
>
> myfilter = function(j) function(x) var(x) < j
>
> Here's what I did...
>
>
>> m = matrix(1:20, 5)
>> myfilter = function(j) function(x) rowVars(x) < j
>> options(error=recover)
>> genefilter(m, filterfun(myfilter(2)))
>>
> genefilter(m, filterfun(myfilter(2)))
> Error in rowSums(!is.na(x)) :
> 'x' must be an array of at least two dimensions
>
> Enter a frame number, or 0 to exit
>
> 1: genefilter(m, filterfun(myfilter(2)))
> 2: apply(expr, 1, flist)
> 3: FUN(newX[, i], ...)
> 4: fun(x)
> 5: rowVars(x)
> 6: rowSums(!is.na(x))
>
> Selection: 4
> Called from: eval(expr, envir, enclos)
> Browse[1]> x
> [1] 1 6 11 16 # Aha, a vector not a matrix with 1 row!
> Browse[1]> Q
>
>> options(error=NULL)
>>
>
> Hope that helps,
>
> Martin
>
>
>> I know the error occurred in:
>> > rowSums
>> function (x, na.rm = FALSE, dims = 1)
>> {
>> if (is.data.frame(x))
>> x <- as.matrix(x)
>> if (!is.array(x) || length(dn <- dim(x)) < 2)
>> stop("'x' must be an array of at least two dimensions")
>> if (dims < 1 || dims > length(dn) - 1)
>> stop("invalid 'dims'")
>> p <- prod(dn[-(1:dims)])
>> dn <- dn[1:dims]
>> z <- if (is.complex(x))
>> .Internal(rowSums(Re(x), prod(dn), p, na.rm)) + (0+1i) *
>> .Internal(rowSums(Im(x), prod(dn), p, na.rm))
>> else .Internal(rowSums(x, prod(dn), p, na.rm))
>> if (length(dn) > 1) {
>> dim(z) <- dn
>> dimnames(z) <- dimnames(x)[1:dims]
>> }
>> else names(z) <- dimnames(x)[[1]]
>> z
>> }
>> <environment: namespace:base>
>>
>> I wrote other filters and they work fine, but the rowVars or rowSums
>> function does not work for me.
>>
>> Can someone help? Thanks in advance !
>>
>> Wayne
>>
>
>
More information about the Bioconductor
mailing list