Using => and <= instead of -> and <- would make things easier, although the precedence would be different. Bill Dunlap TIBCO Software wdunlap tibco.com On Mon, Apr 13, 2020 at 1:43 AM Adrian Du?a <dusa.adrian at gmail.com> wrote:> Thank you for your replies, this actually has little to do with the > regular R code but more to signal what in my package QCA is referred to as > a necessity relation A <- B (A is necessary for B) and sufficiency A -> B > (A is sufficient for B). > > If switched by the parser, A -> B becomes B <- A which makes B necessary > for A, while the intention is to signal sufficiency for B. > > Capturing in a quoted string is trivial, but I am now experimenting with > substitute() to allow unquoted expressions. > > This is especially useful when selecting A and B from the columns of a > data frame, using: c(A, B) instead of c("A", "B") with a lot more quotes > for more complex expressions using more columns. > > I would be grateful for any pointer to a project that processes the code > while it is still raw text. I could maybe learn from their code and adapt > to my use case. > > Best wishes, > Adrian > > > On 13 Apr 2020, at 11:23, Gabriel Becker <gabembecker at gmail.com> wrote: > > > > Adrian, > > > > Indeed, this has come up in a few places, but as Gabor says, there is no > such thing as right hand assignment at any point after parsing is complete. > > > > This means the only feasible way to detect it, which a few projects do I > believe, is process the code while it is still raw text, before it goes > into the parser, and have clever enough regular expressions. > > > > The next question, then, is why are you trying to detect right > assignment. Doing so can be arguably useful fo linting, its true. > Otherwise, though, because its not really a "real thing" when the R code is > being executed, its not something thats generally meaningful to detect in > most cases. > > > > Best, > > ~G > > > > On Mon, Apr 13, 2020 at 12:52 AM G?bor Cs?rdi <csardi.gabor at gmail.com> > wrote: > > That parser already flips -> to <- before creating the parse tree. > > > > Gabor > > > > On Mon, Apr 13, 2020 at 8:39 AM Adrian Du?a <dusa.adrian at gmail.com> > wrote: > > > > > > I searched and tried for hours, to no avail although it looks simple. > > > > > > (function(x) substitute(x))(A <- B) > > > #A <- B > > > > > > (function(x) substitute(x))(A -> B) > > > # B <- A > > > > > > In the first example, A occurs on the LHS, but in the second example A > is somehow evaluated as if it occured on the RHS, despite my understanding > that substitute() returns the unevaluated parse tree. > > > > > > Is there any way, or is it even possible to detect the right hand > assignment, to determine whether A occurs on the LHS? > > > > > > Thanks in advance for any hint, > > > Adrian > > > > > > ? > > > Adrian Dusa > > > University of Bucharest > > > Romanian Social Data Archive > > > Soseaua Panduri nr. 90-92 > > > 050663 Bucharest sector 5 > > > Romania > > > https://adriandusa.eu > > > > > > ______________________________________________ > > > 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 > > ? > Adrian Dusa > University of Bucharest > Romanian Social Data Archive > Soseaua Panduri nr. 90-92 > 050663 Bucharest sector 5 > Romania > https://adriandusa.eu > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Dear Bill, I already tried this, and it would have been great as (currently) the sufficiency relation is precisely "=>"... but: foo <- function(x) return(substitute(x)) foo(A => B) Error: unexpected '>' in "foo(A =>" It seems that "=>" is a syntactic error for the R parser, while "<=" is not because it denotes less than or equal. Now, if I could find a way to define "=>" as a standalone operator, and convince the R parser to bypass that error, it would solve everything. If this is not possible, I am back to detecting "->". Best, Adrian> On 13 Apr 2020, at 19:19, William Dunlap <wdunlap at tibco.com> wrote: > > Using => and <= instead of -> and <- would make things easier, although the precedence would be different. > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Mon, Apr 13, 2020 at 1:43 AM Adrian Du?a <dusa.adrian at gmail.com> wrote: > Thank you for your replies, this actually has little to do with the regular R code but more to signal what in my package QCA is referred to as a necessity relation A <- B (A is necessary for B) and sufficiency A -> B (A is sufficient for B). > > If switched by the parser, A -> B becomes B <- A which makes B necessary for A, while the intention is to signal sufficiency for B. > > Capturing in a quoted string is trivial, but I am now experimenting with substitute() to allow unquoted expressions. > > This is especially useful when selecting A and B from the columns of a data frame, using: c(A, B) instead of c("A", "B") with a lot more quotes for more complex expressions using more columns. > > I would be grateful for any pointer to a project that processes the code while it is still raw text. I could maybe learn from their code and adapt to my use case. > > Best wishes, > Adrian > > > On 13 Apr 2020, at 11:23, Gabriel Becker <gabembecker at gmail.com> wrote: > > > > Adrian, > > > > Indeed, this has come up in a few places, but as Gabor says, there is no such thing as right hand assignment at any point after parsing is complete. > > > > This means the only feasible way to detect it, which a few projects do I believe, is process the code while it is still raw text, before it goes into the parser, and have clever enough regular expressions. > > > > The next question, then, is why are you trying to detect right assignment. Doing so can be arguably useful fo linting, its true. Otherwise, though, because its not really a "real thing" when the R code is being executed, its not something thats generally meaningful to detect in most cases. > > > > Best, > > ~G > > > > On Mon, Apr 13, 2020 at 12:52 AM G?bor Cs?rdi <csardi.gabor at gmail.com> wrote: > > That parser already flips -> to <- before creating the parse tree. > > > > Gabor > > > > On Mon, Apr 13, 2020 at 8:39 AM Adrian Du?a <dusa.adrian at gmail.com> wrote: > > > > > > I searched and tried for hours, to no avail although it looks simple. > > > > > > (function(x) substitute(x))(A <- B) > > > #A <- B > > > > > > (function(x) substitute(x))(A -> B) > > > # B <- A > > > > > > In the first example, A occurs on the LHS, but in the second example A is somehow evaluated as if it occured on the RHS, despite my understanding that substitute() returns the unevaluated parse tree. > > > > > > Is there any way, or is it even possible to detect the right hand assignment, to determine whether A occurs on the LHS? > > > > > > Thanks in advance for any hint, > > > Adrian > > > > > > ? > > > Adrian Dusa > > > University of Bucharest > > > Romanian Social Data Archive > > > Soseaua Panduri nr. 90-92 > > > 050663 Bucharest sector 5 > > > Romania > > > https://adriandusa.eu > > > > > > ______________________________________________ > > > 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 > > ? > Adrian Dusa > University of Bucharest > Romanian Social Data Archive > Soseaua Panduri nr. 90-92 > 050663 Bucharest sector 5 > Romania > https://adriandusa.eu > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel? Adrian Dusa University of Bucharest Romanian Social Data Archive Soseaua Panduri nr. 90-92 050663 Bucharest sector 5 Romania https://adriandusa.eu
On Wed, 15 Apr 2020 10:41:41 +0300 Adrian Du?a <dusa.adrian at gmail.com> wrote:> Now, if I could find a way to define "=>" as a standalone operator, > and convince the R parser to bypass that error, it would solve > everything. If this is not possible, I am back to detecting "->".Just to confirm, are you avoiding custom %operators% because of two extra percent characters one would have to type per operator? -- Best regards, Ivan
You are right. >= is not as evocative as =>. Perhaps > and < would do? %=>% and %<=% would work. Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Apr 15, 2020 at 12:41 AM Adrian Du?a <dusa.adrian at gmail.com> wrote:> Dear Bill, > > I already tried this, and it would have been great as (currently) the > sufficiency relation is precisely "=>"... but: > > foo <- function(x) return(substitute(x)) > foo(A => B) > Error: unexpected '>' in "foo(A =>" > > It seems that "=>" is a syntactic error for the R parser, while "<=" is > not because it denotes less than or equal. > > Now, if I could find a way to define "=>" as a standalone operator, and > convince the R parser to bypass that error, it would solve everything. If > this is not possible, I am back to detecting "->". > > Best, > Adrian > > > > On 13 Apr 2020, at 19:19, William Dunlap <wdunlap at tibco.com> wrote: > > > > Using => and <= instead of -> and <- would make things easier, although > the precedence would be different. > > > > Bill Dunlap > > TIBCO Software > > wdunlap tibco.com > > > > > > On Mon, Apr 13, 2020 at 1:43 AM Adrian Du?a <dusa.adrian at gmail.com> > wrote: > > Thank you for your replies, this actually has little to do with the > regular R code but more to signal what in my package QCA is referred to as > a necessity relation A <- B (A is necessary for B) and sufficiency A -> B > (A is sufficient for B). > > > > If switched by the parser, A -> B becomes B <- A which makes B necessary > for A, while the intention is to signal sufficiency for B. > > > > Capturing in a quoted string is trivial, but I am now experimenting with > substitute() to allow unquoted expressions. > > > > This is especially useful when selecting A and B from the columns of a > data frame, using: c(A, B) instead of c("A", "B") with a lot more quotes > for more complex expressions using more columns. > > > > I would be grateful for any pointer to a project that processes the code > while it is still raw text. I could maybe learn from their code and adapt > to my use case. > > > > Best wishes, > > Adrian > > > > > On 13 Apr 2020, at 11:23, Gabriel Becker <gabembecker at gmail.com> > wrote: > > > > > > Adrian, > > > > > > Indeed, this has come up in a few places, but as Gabor says, there is > no such thing as right hand assignment at any point after parsing is > complete. > > > > > > This means the only feasible way to detect it, which a few projects do > I believe, is process the code while it is still raw text, before it goes > into the parser, and have clever enough regular expressions. > > > > > > The next question, then, is why are you trying to detect right > assignment. Doing so can be arguably useful fo linting, its true. > Otherwise, though, because its not really a "real thing" when the R code is > being executed, its not something thats generally meaningful to detect in > most cases. > > > > > > Best, > > > ~G > > > > > > On Mon, Apr 13, 2020 at 12:52 AM G?bor Cs?rdi <csardi.gabor at gmail.com> > wrote: > > > That parser already flips -> to <- before creating the parse tree. > > > > > > Gabor > > > > > > On Mon, Apr 13, 2020 at 8:39 AM Adrian Du?a <dusa.adrian at gmail.com> > wrote: > > > > > > > > I searched and tried for hours, to no avail although it looks simple. > > > > > > > > (function(x) substitute(x))(A <- B) > > > > #A <- B > > > > > > > > (function(x) substitute(x))(A -> B) > > > > # B <- A > > > > > > > > In the first example, A occurs on the LHS, but in the second example > A is somehow evaluated as if it occured on the RHS, despite my > understanding that substitute() returns the unevaluated parse tree. > > > > > > > > Is there any way, or is it even possible to detect the right hand > assignment, to determine whether A occurs on the LHS? > > > > > > > > Thanks in advance for any hint, > > > > Adrian > > > > > > > > ? > > > > Adrian Dusa > > > > University of Bucharest > > > > Romanian Social Data Archive > > > > Soseaua Panduri nr. 90-92 > > > > 050663 Bucharest sector 5 > > > > Romania > > > > https://adriandusa.eu > > > > > > > > ______________________________________________ > > > > 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 > > > > ? > > Adrian Dusa > > University of Bucharest > > Romanian Social Data Archive > > Soseaua Panduri nr. 90-92 > > 050663 Bucharest sector 5 > > Romania > > https://adriandusa.eu > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ? > Adrian Dusa > University of Bucharest > Romanian Social Data Archive > Soseaua Panduri nr. 90-92 > 050663 Bucharest sector 5 > Romania > https://adriandusa.eu > >[[alternative HTML version deleted]]