From dmurdoch at pair.com  Mon Jul 12 14:05:58 2004
From: dmurdoch at pair.com (Duncan Murdoch)
Date: Mon Jul 12 14:06:33 2004
Subject: [Rd] Re: tail(<matrix>) column numbers
In-Reply-To: <40F11F44.3010302@pburns.seanet.com>
References: <Pine.LNX.4.44.0401261539050.28730-100000@gannet.stats>	<40158C9E.9060807@pburns.seanet.com>	<p0rc10l69l3igm327l4kkjoi8eiobop64l@4ax.com>	<401673AE.1090900@pburns.seanet.com>
	<16622.22750.297030.525566@gargle.gargle.HOWL>
	<40F11F44.3010302@pburns.seanet.com>
Message-ID: <iev4f0t7thrp89acfnpctbvu7o9n5l3t7b@4ax.com>

On Sun, 11 Jul 2004 12:06:44 +0100, Patrick Burns
<pburns@pburns.seanet.com> wrote :

>I disagree with Martin's assertion that "tail" is not useful
>for programming.  It has a few features relative to the
>do-it-yourself approach:

Me too actually.  I think tail() has two uses, interactive and
programmatic.  I think it would be better for interactive use if 
the row names were added, and only slightly worse for programmatic use
if an option were given to turn them off.

In interactive use, I find it unhelpful to be told that something is
in row 3 when it's really in row 47.

Duncan Murdoch

>
>*)  It compactly makes the intention clear.
>*)  It automatically handles cases where there may be
>either a vector or a matrix.
>*)  It handles cases where there is less data than is being
>sought (which may or may not be a good thing).
>
>"tail" of functions is what is definitely intended for interactive
>use.
>
>Pat
>
>Martin Maechler wrote:
>
>>>>>>>"PatBurns" == Patrick Burns <pburns@pburns.seanet.com>
>>>>>>>    on Tue, 27 Jan 2004 14:20:30 +0000 writes:
>>>>>>>            
>>>>>>>
>>
>>[more than half a year ago]
>>
>>    PatBurns> Duncan Murdoch wrote:
>>
>>   .............
>>
>>    DM> One other one I'll look at:
>>    DM> 
>>    DM> If a matrix doesn't have row names, I might add names
>>    DM> like '[nn,]' to it, so I get results like
>>
>>      R> x <- matrix(1:100,ncol=2)
>>      R> tail(x)
>>   Rout>       [,1] [,2]
>>   Rout> [45,]   45   95
>>   Rout> [46,]   46   96
>>   Rout> [47,]   47   97
>>   Rout> [48,]   48   98
>>   Rout> [49,]   49   99
>>   Rout> [50,]   50  100
>>   Rout> 
>>    DM> instead of the current
>>
>>      R> tail(x)
>>   Rout>      [,1] [,2]
>>   Rout> [1,]   45   95
>>   Rout> [2,]   46   96
>>   Rout> [3,]   47   97
>>   Rout> [4,]   48   98
>>   Rout> [5,]   49   99
>>   Rout> [6,]   50  100
>>
>>    DM> I just want to be careful that this doesn't mess up
>>    DM> something else.
>>    DM> 
>>    DM> Duncan Murdoch
>>
>>
>>    PatBurns> I think this could be being too "helpful".  Using
>>    PatBurns> tail on a matrix may often be done in a program so
>>    PatBurns> I think leaving things as they come is the best
>>    PatBurns> policy.
>>
>>I tend to disagree, and would like to have us think about it
>>again:
>>
>>1)  Duncan's proposal was to only add row names *when* there are none.
>>2)  Pat is write that tail() for matrices maybe used not only interactively
>>    and help(tail)'s "Value:" section encourages this to some extent.
>>
>>    However, how can adding column names to such a matrix-tail be harmful?
>>
>>    Well, only in the case where the tail is quite large, the
>>    added dimnames add unneeded memory and other overhead when
>>    dealing with that matrix.
>>
>> But I think, programmers/users caring about efficient code
>> wouldn't use tail(<matrix>) in their function code, would they?
>>
>>In conclusion, I'd still argue for following Duncan's proposal,
>>maybe adding a \note{.} to head.Rd stating that these functions
>>were meant for interactive use, and for "programming", we'd
>>rather recommend the direct  (n-k+1):n indexing.
>>
>>
>>  
>>
>
>
>


[Rd] Re: tail(<matrix>) column numbers
Duncan Murdoch