[R] array(list(),c(2,5)) gives error in R 1.8.1

Tony Plate tplate at blackmesacapital.com
Wed Jan 14 16:58:11 CET 2004


I confirmed this -- array(list(), c(2,2)) works in R 1.6.2 and R 1.7.1, but 
not in R 1.8.0.  This appears to be due to a change in array(): rep(data, 
t1) was changed to rep.int(data, t1).  When data=list(), t1==Inf, and 
rep(data, t1) returns list(), while rep.int(data, t1) gives an 
error.  Here's a transcript from R 1.8.0:

 > array
function (data = NA, dim = length(data), dimnames = NULL)
{
     data <- as.vector(data)
     vl <- prod(dim)
     if (length(data) != vl) {
         t1 <- ceiling(vl/length(data))
         data <- rep.int(data, t1)
         if (length(data) != vl)
             data <- data[1:vl]
     }
     if (length(dim))
         dim(data) <- dim
     if (is.list(dimnames) && length(dimnames))
         dimnames(data) <- dimnames
     data
}
<environment: namespace:base>
 > rep(list(), Inf)
list()
 > rep.int(list(), Inf)
Error in rep.int(list(), Inf) : invalid number of copies in "rep"
In addition: Warning message:
NAs introduced by coercion
 > array(numeric(3), 0,0)
numeric(0)
 >

There's also the dangerous construct data[1:v1] in array() 
(data[seq(len=v1)] would be much safer).  However, it appears that the 1:0 
trap doesn't occur under normal circumstances (because if v1=0, then t1 
will be either 0 or Inf, and length(rep.int(data, t1)) will be 0 or an 
error will have occurred (with most common data types at 
least).  However^2, given that functions in R don't always produce the 
results one might expect, it might be safer to change this to 
data[seq(len=v1)].

A workaround is to give array() a data value of the correct length:

 > array(list()[1:4], c(2,2))
      [,1] [,2]
[1,] NULL NULL
[2,] NULL NULL
 >

-- Tony Plate

At Wednesday 10:35 AM 1/14/2004 +0100, you wrote:
>Hi
>
>In R 1.7 the following worked fine:
>
> > array(list(),c(2,5))
>      [,1] [,2] [,3] [,4] [,5]
>[1,] NULL NULL NULL NULL NULL
>[2,] NULL NULL NULL NULL NULL
>
>now in R 1.8.1 I get the error:
>
>Error in rep.int(data, t1) : invalid number of copies in "rep"
>In addition: Warning message:
>NAs introduced by coercion
>
>thanks for help, I need this possibility for storing objects (lm
>results) in an array
>
>cheers
>
>Christoph
>--
>Christoph Lehmann <christoph.lehmann at gmx.ch>
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list