[Rd] Issue when calling deparse(substitute(x)) from C with "anonymous" R vectors ?
Duncan Murdoch
murdoch at stats.uwo.ca
Thu Nov 19 12:32:38 CET 2009
Can you put together a minimal, self contained example, not requiring an
external system? This has the symptoms of a bug in the external code
(e.g. a missing PROTECT), but it is possible it's a bug in R.
Duncan Murdoch
On 19/11/2009 2:40 AM, Laurent Gautier wrote:
> Dear list,
>
>
> When calling R from C, what appears like a spurious error can be
> triggered during the execution of chisq.test(x, y).
>
> This is happening when the following conditions are met:
>
> - x and y are "anonymous" C-level R vectors (they do not have a symbol),
> but they are protected from garbage collection
>
> - x and y are "not too small" (it was experienced as soon as they are
> longer than 17 elements).
>
>
> The error is
>
> Error in names(dimnames(x)) <- DNAME :
> 'names' attribute [4] must be the same length as the vector [2]
>
> and can be traced to the use of deparse(substitute(x)) and
> deparse(substitute(y)) in the R code.
>
> What seems to be happening is that the deparse(substitute(x)) call
> gives a character vector of length > 1 as soon as x is "not so small".
>
> To demonstrate this, I am using rpy2 (as the problem was found when using it
> http://sourceforge.net/mailarchive/forum.php?thread_name=4B043CA1.9050500%40salilab.org&forum_name=rpy-list
> ), but it will likely be present in other bridges to R as well.
>
>
> #using R-2.10 and rpy2-2.1.dev
> >>> import rpy2.robjects as robjects
>
> >>> f = robjects.r('''function(x) return(deparse(substitute(x)))''')
>
> >>> tuple(f(robjects.FloatVector(range(17))))
> ('c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)',)
> # length 1
> >>> tuple(f(robjects.FloatVector(range(18))))
> ('c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17', ')')
> # length 2 !!
>
>
> Does it seem to others like an issue present in other bridges as well ?
>
>
>
> L.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list