Henrik Bengtsson
2014-Oct-24 03:10 UTC
[Rd] No error when assigning values to an "empty" vector/matrix/array
Assigning one or more values to a vector/matrix/array x for which length(x) == 0 gives no error, e.g.> x <- integer(0) > x[] <- 1:2> x <- matrix(nrow=0, ncol=1) > x[] <- 1:2 > x[,1] <- 1:2> x <- array(dim=c(0,1,1)) > x[] <- 1:2 > x[,1,1] <- 1:2whereas> x <- integer(1) > x[] <- 1:2Warning message: In x[] <- 1:2 : number of items to replace is not a multiple of replacement length> x <- matrix(nrow=1, ncol=1) > x[] <- 1:2Warning message: In x[] <- 1:2 : number of items to replace is not a multiple of replacement length> x[,1] <- 1:2Error in x[, 1] <- 1:2 : number of items to replace is not a multiple of replacement length> x <- array(dim=c(1,1,1)) > x[] <- 1:2Warning message: In x[] <- 1:2 : number of items to replace is not a multiple of replacement length> x[,1,1] <- 1:2Error in x[, 1, 1] <- 1:2 : number of items to replace is not a multiple of replacement length Is this intended by design or is it a bug that should be reported? /Henrik
Hervé Pagès
2014-Oct-24 08:58 UTC
[Rd] No error when assigning values to an "empty" vector/matrix/array
Hi Henrik, On 10/23/2014 08:10 PM, Henrik Bengtsson wrote:> Assigning one or more values to a vector/matrix/array x for which > length(x) == 0 gives no error, e.g. > >> x <- integer(0) >> x[] <- 1:2 > >> x <- matrix(nrow=0, ncol=1) >> x[] <- 1:2 >> x[,1] <- 1:2 > >> x <- array(dim=c(0,1,1)) >> x[] <- 1:2 >> x[,1,1] <- 1:2 > > whereas > >> x <- integer(1) >> x[] <- 1:2 > Warning message: > In x[] <- 1:2 : > number of items to replace is not a multiple of replacement length >> x <- matrix(nrow=1, ncol=1) >> x[] <- 1:2 > Warning message: > In x[] <- 1:2 : > number of items to replace is not a multiple of replacement length >> x[,1] <- 1:2 > Error in x[, 1] <- 1:2 : > number of items to replace is not a multiple of replacement length >> x <- array(dim=c(1,1,1)) >> x[] <- 1:2 > Warning message: > In x[] <- 1:2 : > number of items to replace is not a multiple of replacement length >> x[,1,1] <- 1:2 > Error in x[, 1, 1] <- 1:2 : > number of items to replace is not a multiple of replacement length > > Is this intended by design or is it a bug that should be reported?Since [<- supports truncating of the right value, why an exception should be made when the left vector has length 0? Also note that these warnings or errors are complaining that the number of items to replace (left length) is not a multiple of replacement length (right length). This suggests that when the left length is a multiple of the right length, everything is fine. And this is actually the case when the left length is 0. Because 0 is a multiple of anything. So in that case, the right value is truncated to length 0 and no warning is issued. Makes sense to me. Cheers, H.> > /Henrik > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Herv? Pag?s Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M1-B514 P.O. Box 19024 Seattle, WA 98109-1024 E-mail: hpages at fhcrc.org Phone: (206) 667-5791 Fax: (206) 667-1319
Reasonably Related Threads
- sum() returns NA on a long *logical* vector when nb of TRUE values exceeds 2^31
- sum() returns NA on a long *logical* vector when nb of TRUE values exceeds 2^31
- sum() returns NA on a long *logical* vector when nb of TRUE values exceeds 2^31
- as.vector() broken on a matrix or array of type "list"
- improving the performance of install.packages