From hb at biostat.ucsf.edu  Fri Oct 24 15:34:07 2014
From: hb at biostat.ucsf.edu (Henrik Bengtsson)
Date: Fri, 24 Oct 2014 06:34:07 -0700
Subject: [Rd] No error when assigning values to an "empty"
	vector/matrix/array
In-Reply-To: <544A14C4.6040608@fhcrc.org>
References: <CAFDcVCQWWDvfSmiapMWBJ75WmMzyAMYsndmJaJp1r=-uzG7yXQ@mail.gmail.com>
	<544A14C4.6040608@fhcrc.org>
Message-ID: <CAFDcVCQ+EODm1LXHyfFAfC5a3YrSUwt3-RL30=5bxdQaiAEy1Q@mail.gmail.com>

On Oct 24, 2014 1:59 AM, "Herv? Pag?s" <hpages at 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 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

	[[alternative HTML version deleted]]



[Rd] No error when assigning values to an "empty" vector/matrix/array
Henrik Bengtsson