how to know if a macro exists in `execute R`?

juju
juju New Altair Community Member
edited November 5 in Community Q&A

Hi the content is this:

- need to pass values as macros, since that seems to be the only way for web service

- use `execute R` to parse the macros, since it's more flexible to handle strings and lots of if...then...

 

 

First question is how to refer to macro in `execute R`. I did some tests and figured it out myself:

Suppose you set macro m1 to be x, then whenever your write %{m1} in `execute R`, the software will just literally replace %{m1} with x

Untitled2.png

For example:

rm_main = function()
{
x = 3
z = %{m1} # interpreted as z = x
print(z) # 3

xy = 3
z = %{m1}y # interpreted as z = xy
print(z) # 3

}

If want to pass a string 'x', either set macro m1 to be 'x',

or do z = '%{m1}' in `execute R`.

 

 

Now the second question is, if some macros are optional, how to test if they exist in `execute R`?

One solution is, fix it at the web service side - Always set macro to be NA if it's not used.

But can we handle omitted macro in `exexute R`? (So that the web service side can pass as many macros as they want)

This doesn't seem to work

exists('%{m1}')  # interpreted as exists('x'), can't test if the macro exists

Use `try`

rm_main = function()
{
try( z <- '%{m1}' )
print(exists('z'))
}

when there's no macro m1, it stills throws error (even when using `try`)

Untitled2.png

How do I test the existance of a macro?

Any help's appreciated. Thank you~

 

 

Best Answer

  • MartinLiebig
    MartinLiebig
    Altair Employee
    Answer ✓

    Hi,

     

    what about defining them in the context with a default value of -1 or something. You can test in R on if (%{myMacro!=-1) or something

     

    Edit: Another option would be to do the handling in RM using either Branch or Handle Exception.

     

    ~Martin

Answers

  • MartinLiebig
    MartinLiebig
    Altair Employee
    Answer ✓

    Hi,

     

    what about defining them in the context with a default value of -1 or something. You can test in R on if (%{myMacro!=-1) or something

     

    Edit: Another option would be to do the handling in RM using either Branch or Handle Exception.

     

    ~Martin

  • David_A
    David_A New Altair Community Member

     Hi,

     

    just to add some details:

    The reason why you get an exception in the R script is because macros are always evaluated first and the results are then applied by the corresponding Operator.

    Otherwise Martin's suggesting should work perfectly.

     

     

     

  • juju
    juju New Altair Community Member

    nice trick! Thanks Martin