From murray at stokely.org  Tue Apr  1 03:27:53 2014
From: murray at stokely.org (Murray Stokely)
Date: Mon, 31 Mar 2014 18:27:53 -0700
Subject: [Rd] C API to get numrow of data frame
In-Reply-To: <CABtg=K=btOH=m3e6sLE+JNyqFcs5Y2OPWr_Ayg6HYVjuZMfKFw@mail.gmail.com>
References: <CAGSjAUBKaMh0gipxCvGCftDLPX8EfnVhp3vGY1D=mQ=i-P=YdA@mail.gmail.com>
	<CAECWziL0EeJqHLSrr9fYzRT5bgPeGLzWX-4Kmwx+8jQL978ycQ@mail.gmail.com>
	<CABtg=K=btOH=m3e6sLE+JNyqFcs5Y2OPWr_Ayg6HYVjuZMfKFw@mail.gmail.com>
Message-ID: <CAECWziKRWv_y_SUdivEpnHBiSS4p3GQLKeZobFTfeQFeEGsQ+A@mail.gmail.com>

I didn't look at the names because I believe that would be incorrect
if the row names were stored internally in the compact form.

See ?.set_row_names (hat tip, Tim Hesterberg who showed me this years ago) :

     'row.names' can be stored internally in compact form.
     '.set_row_names(n)' generates that form for automatic row names of
     length 'n', to be assigned to 'attr(<a data frame>, "row.names")'.
     '.row_names_info' gives information on the internal form of the
     row names for a data frame: for details of what information see
     the argument 'type'.

The function I wrote obviously doesn't work for 0 row or 0 column
data.frames, you need to check for that.

On Mon, Mar 31, 2014 at 6:12 PM, G?bor Cs?rdi <csardi.gabor at gmail.com> wrote:
> I think it is actually better to check the length of the row names. In case
> the data frame has zero columns. (FIXME, of course.)
>
> Gabor
>
>
> On Mon, Mar 31, 2014 at 8:04 PM, Murray Stokely <murray at stokely.org> wrote:
>>
>> The simplest case would be:
>>
>>    int num_rows = Rf_length(VECTOR_ELT(dataframe, 0));
>>    int num_columns = Rf_length(dataframe);
>>
>> There may be edge cases for which this doesn't work; would need to
>> look into how the dim primitive is implemented to be sure.
>>
>>                - Murray
>>
>>
>> On Mon, Mar 31, 2014 at 4:40 PM, Sandip Nandi <sannandi at umail.iu.edu>
>> wrote:
>> > Hi ,
>> >
>> > Is there any C API to the R API  nrow of dataframe ?
>> >
>> > x<- data.frame()
>> > n<- nrow(x)
>> > print(n)
>> > 0
>> >
>> >
>> > Example :
>> > My C function which deals with data frame looks like and I don't to send
>> > the  number of rows of data frame .I want to detect it from the function
>> > itself, my function take data frame as argument and do some on it. I
>> > want
>> > API equivalent to nrow. I tried Rf_nrows,Rf_ncols . No much help.
>> >
>> > SEXP  writeRR(SEXP dataframe) {
>> >
>> > }
>> >
>> >
>> > Any help is very appreciated.
>> >
>> > Thanks,
>> > Sandip
>> >
>> >         [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-devel at r-project.org mailing list
>> > https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



[Rd] C API to get numrow of data frame
Murray Stokely