On Oct 24, 2014 1:59 AM, "Hervé Pagès" <hpa...@fhcrc.org> wrote: > > 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.
Thanks Hervé, you gave the perfect explanation/rationale for this being consistent. Henrik PS. The background to my question was that I had a function that populated a zero-row matrix column by column with values. These values were in turn generated by another function that incorrectly read all values available in for when indeed requestion zero (treating NULL ["read all"] and integer(0) ["read none"] equally). An implementation error that indeed gave the correct value in the end, although in an extremely inefficient way. > > Cheers, > H. > >> >> /Henrik >> >> ______________________________________________ >> R-devel@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: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel