Proposed patch (I think .txt files work OK as attachments to the list?)

On 2019-04-04 2:21 a.m., Martin Maechler wrote:
>>>>>> Ben Bolker 
>>>>>>     on Fri, 29 Mar 2019 12:34:50 -0400 writes:
> 
>     > I suspect that the issue is addressed (obliquely) in the examples,
>     > which shows that variables with spaces in them (or otherwise
>     > 'non-syntactic', i.e. not satisfying the constraints of legal R symbols)
>     > can be handled by protecting them with backticks  (``)
> 
>     > ## using non-syntactic names:
>     > reformulate(c("`P/E`", "`% Growth`"), response = as.name("+-"))
> 
>     > It seems to me there could be room for a *documentation* patch (stating
>     > explicitly that if termlabels has length > 1 its elements are
>     > concatenated with "+", and explicitly stating that non-syntactic names
>     > must be protected with back-ticks).  (There is a little bit of obscurity
>     > in the fact that the elements of termlabels don't have to be
>     > syntactically valid names: many will be included in formulas if they can
>     > be interpreted as *parseable* expressions, e.g. reformulate("x<2"))
> 
>     > I would be happy to give it a shot if the consensus is that it would
>     > be worthwhile.
> 
> I think it would be worthwhile to add to the docs a bit.
> 
> [With currently just your and my vote, we have a 100% consensus
> ;-)]
> 
> Martin
> 
>     > One workaround to the OP's problem is below (may be worth including
>     > as an example in docs)
> 
>     >> z <- c("a variable","another variable")
>     >> reformulate(z)
>     > Error in parse(text = termtext, keep.source = FALSE) :
>     > <text>:1:6: unexpected symbol
>     > 1:  ~ a variable
>     > ^
>     >> reformulate(sprintf("`%s`",z))
>     > ~`a variable` + `another variable`
> 
> 
> 
> 
>     > On 2019-03-29 11:54 a.m., J C Nash wrote:
>     >> The main thing is to post the "small reproducible example".
>     >> 
>     >> My (rather long term experience) can be written
>     >> 
>     >> if (exists("reproducible example") ) {
>     >> DeveloperFixHappens()
>     >> } else {
>     >> NULL
>     >> }
>     >> 
>     >> JN
>     >> 
>     >> On 2019-03-29 11:38 a.m., Saren Tasciyan wrote:
>     >>> Well, first I can't sign in bugzilla myself, that is why I wrote here 
> first. Also, I don't know if I have the time at
>     >>> the moment to provide tests, multiple examples or more. If that is 
> not ok or welcomed, that is fine, I can come back,
>     >>> whenever I have more time to properly report the bug.
>     >>> 
>     >>> I didn't find the existing bug report, sorry for that.
>     >>> 
>     >>> Yes, it is related. My problem was that I have column names with 
> spaces and current solution doesn't solve it. I have a
>     >>> solution, which works for me and maybe also for others.
>     >>> 
>     >>> Either, someone can register me to bugzilla or I can post it here, 
> which could give some direction to developers. I
>     >>> don't mind whichever is preferred here.
>     >>> 
>     >>> Best,
>     >>> 
>     >>> Saren
>     >>> 
>     >>> 
>     >>> On 29.03.19 09:29, Martin Maechler wrote:
>     >>>>>>>>> Saren Tasciyan
>     >>>>>>>>>      on Thu, 28 Mar 2019 17:02:10 +0100 writes:
>     >>>>      > Hi,
>     >>>>      > I have found a bug in reformulate function and have a 
> solution for it. I
>     >>>>      > was wondering, where I can submit it?
>     >>>> 
>     >>>>      > Best,
>     >>>>      > Saren
>     >>>> 
>     >>>> 
>     >>>> Well, you could have given a small reproducible example
>     >>>> depicting the bug, notably when posting here:
>     >>>> Just a prose text with no R code or other technical content is
>     >>>> almost always not really appropriate fo the R-devel mailing list.
>     >>>> 
>     >>>> Further, in such a case you should google a bit and hopefully
>     >>>> have found
>     >>>>         https://www.r-project.org/bugs.html
>     >>>> 
>     >>>> which also mention reproducibility (and many more useful things).
>     >>>> 
>     >>>> Then it also tells you about R's bug repository, also called
>     >>>> "R's bugzilla" at https://bugs.r-project.org/
>     >>>> 
>     >>>> and if you are diligent (but here, I'd say bugzilla is
>     >>>> (configured?) far from ideal), you'd also find bug PR#17359
>     >>>> 
>     >>>>     https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17359
>     >>>> 
>     >>>> which was reported already on Nov 2017 .. and only fixed
>     >>>> yesterday (in the "cleanup old bugs" process that happens
>     >>>> often before the big new spring release of R).
>     >>>> 
>     >>>> So is your bug the same as that one?
>     >>>> 
>     >>>> Martin
>     >>>> 
>     >>>>      > --
>     >>>>      > Saren Tasciyan
>     >>>>      > /PhD Student / Sixt Group/
>     >>>>      > Institute of Science and Technology Austria
>     >>>>      > Am Campus 1
>     >>>>      > 3400 Klosterneuburg, Austria
>     >>>> 
>     >>>>      > ______________________________________________
>     >>>>      > R-devel@r-project.org mailing list
>     >>>>      > https://stat.ethz.ch/mailman/listinfo/r-devel
>     >>>> 
>     >>>> ______________________________________________
>     >>>> R-devel@r-project.org mailing list
>     >>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>     >> 
>     >> ______________________________________________
>     >> R-devel@r-project.org mailing list
>     >> https://stat.ethz.ch/mailman/listinfo/r-devel
>     >> 
> 
>     > ______________________________________________
>     > R-devel@r-project.org mailing list
>     > https://stat.ethz.ch/mailman/listinfo/r-devel
> 
Index: delete.response.Rd
===================================================================
--- delete.response.Rd  (revision 76312)
+++ delete.response.Rd  (working copy)
@@ -37,7 +37,11 @@
   model. There is also a \code{"[.terms"} method to perform the same
   function (with \code{keep.response = TRUE}).
 
-  \code{reformulate} creates a formula from a character vector.
+  \code{reformulate} creates a formula from a character vector. If
+  \code{length(termlabels)}>1, its elements are concatenated with \code{+}.
+  Non-syntactic names (e.g. containing spaces or special characters; see
+  \code{\link{make.names}}) must be protected with backticks  (see examples).
+
 }
 \value{
   \code{delete.response} and \code{drop.terms} return a \code{terms}
@@ -65,6 +69,9 @@
 ## using non-syntactic names:
 reformulate(c("`P/E`", "`\% Growth`"), response = as.name("+-"))
 
+x <- c("a name","another name")
+reformulate(sprintf("`%s`",x))
+
 stopifnot(identical(      ~ var, reformulate("var")),
           identical(~ a + b + c, reformulate(letters[1:3])),
           identical(  y ~ a + b, reformulate(letters[1:2], "y"))
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to