Skip to content

as.data.frame.character lacks nm= argument

5 messages · Bert Gunter, Brian Ripley, William Dunlap +1 more

#
Is the following behavior with as.data.frame(nm=...) a bug?  It is an inconsistency:
Error in as.data.frame.vector(x, ..., nm = nm) : 
  formal argument "nm" matched by multiple actual arguments

nm= works for integer arguments:
OneToTen
1         1
2         2
3         3
4         4
5         5
6         6
7         7
8         8
9         9
10       10

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
Bill:

as.data.frame.character() has no nm, argument, so providing one causes
the error as you can see from the code. Presumably, this is what you
meant by bug/inconsistency, right?

-- Bert
On Thu, Sep 13, 2012 at 1:32 PM, William Dunlap <wdunlap at tibco.com> wrote:

  
    
#
On 13/09/2012 21:48, Bert Gunter wrote:
This is using an undocumented argument, 'nm'.  I don't believe anything 
is said about what might happen if you do that except that it will be 
passed to methods -- they are not obliged to accept it.

If it were intended for this to be a feature, I think the author might 
have chosen a less opaque name than 'nm'.

Where we go from here is under discussion in R-core.

  
    
#
Thanks Brian,

I am not sure why the user who ran into this problem was using
   as.data.frame(theColumn, nm=theName)
but it may have been an attempt to make a data.frame with a
variable for a column name, which is a pain when calling data.frame.

It also is faster, but I doubt that was the reason:
  > system.time(for(i in 1:1e4)data.frame(x=log(seq_len(100))))
     user  system elapsed 
     1.06    0.00    1.06 
  > system.time(for(i in 1:1e4)as.data.frame(log(seq_len(100))))
     user  system elapsed 
     0.62    0.00    0.63 
  > system.time(for(i in 1:1e4)as.data.frame(log(seq_len(100)), nm="x"))
     user  system elapsed 
     0.17    0.00    0.17  

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
On Sep 14, 2012, at 15:25 , Prof Brian Ripley wrote:

            
It wasn't, but the author (me) might have chosen a _more_ opaque name if he had thought it necessary to keep people from using undocumented arguments. As it happened, I think I just promoted a variable name inside as.data.frame.vector to become an argument.

But it was a long time ago, in a different job, and besides....