substitute() does not have an argument 'list'; it does have 'env'.

Replace this line:

            list = list (member = as.name (member),

with

            env = list (member = as.name (member),

 -Peter Ehlers

On 2010-05-14 3:09, Gil Tomás wrote:
Dear list,

A while ago I found in the web a function (sadly I can't credit the
author as I don't remember where I picked it up from) whose output is
a dataframe that lists for every object in the global environment its
class, mode, dim&  length (where applicable). It is meant to be an
upgrade to the ls () function with a far more informative and detailed
output and it quickly became one of my most frequent calls in any R
session (source added to my .Rprofile). However, since I upgraded to R
2.11, the function stopped working, retrieving the following error:

******
R>  ll ()
Error in substitute({ :
   unused argument(s) (list = list(member = as.name(member), property =
property, fcn = as.name(property)))
******

This seems to be due to a change in the substitute function in R 2.11,
as described in the release notes:

******
Primitive functions UseMethod(), attr(), attr<-(), on.exit(),
        retracemem() and substitute() now use standard argument
        matching (rather than positional matching).  This means that
        all multi-argument primitives which are not internal now use
        standard argument matching except where positional matching is
        desirable (as for switch(), call(), .C() ...).
******

I've tried to debug it myself, but unfortunately my knowledge of R is
not deep enough to find a compatible version of the function with R
2.11 yet. Here is the ll () function:

******
ll<- function() {
   df<- NULL
   envir<- parent.frame ()
   for (member in ls (envir = envir))
     {
       oneRow<- list (member = member)
       for (property in c ("class", "mode", "dim", "length"))
         {
           value<- eval (substitute ( # this is the call producing the
error in R 2.11
                                      {
                                        fcn<- get (property, mode = "function")
                                        fcn (member)
                                      },
                                      list = list (member = as.name (member),
                                        property = property,
                                        fcn = as.name (property))
                                      ),
                          envir = envir)
       if (is.null (value))
         value<- "NULL"
       else if (is.vector (value)&&  length (value)>  1)
         value<- sprintf ("c(%s)", paste (value, collapse = ","))
       else if (is.list (value))
         value<- unlist (value)
       if (length (value)>  0)
         value<- value[1]
       value<- as.character (value)
           oneRow[[property]]<- value
         }
       df<- rbind (df, as.data.frame (oneRow))
     }
   df
}
******

Could anyone give me a hint as how to tweak the substitute call to
render it compatible with R 2.11?

Any help greatly appreciated,
Gil

______________________________________________
R-help@r-project.org mailing list
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.



______________________________________________
R-help@r-project.org mailing list
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