Gabor Grothendieck
on Thu, 14 May 2020 06:56:06 -0400 writes:
If you are looking at ftable could you also consider adding a way to convert an ftable into a usable data.frame such as the ftable2df function defined here:
and there is an example of using it here:
Being able to move back and forth between various base class representations seems like something that would be natural to provide.
Sure!
But there is already an as.data.frame() method for "ftable",
{and I would not want the if(! .. ftable) ftable(x) part anyway.
What I think many useRs / programmeRs very often forget about
is more-than-2-dimensional arrays {which *are* at the beginning
of that SO question} and that these are often by far the most
efficient data structure (rather than the corresponding data frames).
and even less people forget that a "table" in base R is just a
special case of a 1-D, 2-D, 3-D, .... array.
(Semantically a special case: "array" with non-negative integer content
I'd claim that everything you here ("move back and forth between
...") is already there in the "ftable" implementation in stats,
notably in the source file src/library/stats/R/ftable.R
-> https://svn.r-project.org/R/trunk/src/library/stats/R/ftable.R
The problem may be in
1) too sparse documentation about the close relations
"ftable" <-> "array" <-> "table" <-> "data.frame"
2) people not thinking often enough about more-than-2D-arrays and the
special corresponding class "table" in R.
To start with one:
str(UCBAdmissions)
'table' num [1:2, 1:2, 1:6] 512 313 89 19 353 207 17 8 120 205 ... - attr(*, "dimnames")=List of 3 ..$ Admit : chr [1:2] "Admitted" "Rejected" ..$ Gender: chr [1:2] "Male" "Female" ..$ Dept : chr [1:6] "A" "B" "C" "D" ...
and look at the *examples* in the help files and the S3 methods methods(class = "ftable") [1] as.data.frame as.matrix as.table format head print [7] tail see '?methods' for accessing help and source code
methods(class = "table")
[1] [ aperm as.data.frame Axis coerce initialize [7] lines plot points print show slotsFromS3 [13] summary tail see '?methods' for accessing help and source code
... need to close now, there's more to be said ...
> On Thu, May 14, 2020 at 5:32 AM Martin Maechler
> <maechler at stat.math.ethz.ch> wrote:
>>
>> >>>>> SOEIRO Thomas
>> >>>>> on Wed, 13 May 2020 20:27:15 +0000 writes:
>>
>> > Dear all,
>> > I haven't received any feedback so far on my proposal to make "justify" argument available in stats:::format.ftable
>>
>> > Is this list the appropriate place for this kind of proposal?
>>
>> Yes, it is.. Actually such a post is even a "role model" post
>> for R-devel.
>>
>> > I hope this follow-up to my message won't be taken as rude. Of course it's not meant to be, but I'm not used to the R mailing lists...
>>
>> well, there could be said much, and many stories told here ... ;-)
>>
>> > Thank you in advance for your comments,
>>
>> > Best,
>> > Thomas
>>
>> The main reasons for "no reaction" (for such nice post) probably
>> are combination of the following
>>
>> - we are busy
>> - if we have time, we think other things are more exciting
>> - we have not used ftable much/at all and are not interested.
>>
>> Even though the first 2 apply to me, I'll have a 2nd look into
>> your post now, and may end up well agreeing with your proposal.
>>
>> Martin Maechler
>> ETH Zurich and R Core team
>>
>>
>>
>>
>> >> Dear all,
>> >>
>> >> justify argument is hard coded in format.ftable:
>> >>
>> >> cbind(apply(LABS, 2L, format, justify = "left"),
>> >> apply(DATA, 2L, format, justify = "right"))
>> >>
>> >> It would be useful to have the possibility to modify the argument between c("left", "right", "centre", "none") as in format.default.
>> >>
>> >> The lines could be changed to:
>> >>
>> >> if(length(justify) != 2)
>> >> stop("justify must be length 2")
>> >> cbind(apply(LABS, 2L, format, justify = justify[1]),
>> >> apply(DATA, 2L, format, justify = justify[2]))
>> >>
>> >> The argument justify could defaults to c("left", "right") for backward compatibility.
>> >>
>> >> It could then allow:
>> >> ftab <- ftable(wool + tension ~ breaks, warpbreaks)
>> >> format.ftable(ftab, justify = c("none", "none"))
>> >>
>> >> Best regards,
>> >>
>> >> Thomas
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com