should have added: dim(x)[2L] -> length(x)

Am 31.03.20 um 16:21 schrieb Prof. Dr. Matthias Kohl:
Dear Ivan,

if I enter ncol in the console, I get

function (x)
dim(x)[2L]
<bytecode: 0x5559e9429030>
<environment: namespace:base>

indicating that function dim is called. Function dim has a method for data.frame; see methods("dim").

The dim-method for data.frame is

dim.data.frame
function (x)
c(.row_names_info(x, 2L), length(x))
<bytecode: 0x5559eb80da40>
<environment: namespace:base>

Hence, it calls length on the provided data.frame. In addition, some "magic" with .row_names_info is performed, where

base:::.row_names_info
function (x, type = 1L)
.Internal(shortRowNames(x, type))
<bytecode: 0x5559ece50160>
<environment: namespace:base>

Best
Matthias

Am 31.03.20 um 16:10 schrieb Ivan Calandra:
Thanks Ivan for the answer.

So it confirms my first thought that these two functions are equivalent
when applied to a "simple" data.frame.

The reason I was asking is because I have gotten used to use length() in
my scripts. It works perfectly and I understand it easily. But to be
honest, ncol() is more intuitive to most users (especially the novice)
so I was thinking about switching to using this function instead (all my
data.frames are created from read.csv() or similar functions so there
should not be any issue). But before doing that, I want to be sure that
it is not going to create unexpected results.

Thank you,
Ivan

--
Dr. Ivan Calandra
TraCEr, laboratory for Traceology and Controlled Experiments
MONREPOS Archaeological Research Centre and
Museum for Human Behavioural Evolution
Schloss Monrepos
56567 Neuwied, Germany
+49 (0) 2631 9772-243
https://www.researchgate.net/profile/Ivan_Calandra

On 31/03/2020 16:00, Ivan Krylov wrote:
On Tue, 31 Mar 2020 14:47:54 +0200
Ivan Calandra <calan...@rgzm.de> wrote:

On a simple data.frame (i.e. each element is a vector), ncol() and
length() will give the same result.
Are they just equivalent on such objects, or are they differences in
some cases?
I am not aware of any exceptions to ncol(dataframe)==length(dataframe)
(in fact, ncol(x) is dim(x)[2L] and ?dim says that dim(dataframe)
returns c(length(attr(dataframe, 'row.names')), length(dataframe))), but
watch out for AsIs columns which can have columns of their own:

x <- data.frame(I(volcano))
dim(x)
# [1] 87  1
length(x)
# [1] 1
dim(x[,1])
# [1] 87 61



______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



--
Prof. Dr. Matthias Kohl
www.stamats.de

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to