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

juju
juju New Altair Community Member
edited November 2024 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~

 

 

Welcome!

It looks like you're new here. Sign in or register to get started.

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

Welcome!

It looks like you're new here. Sign in or register to get started.

Welcome!

It looks like you're new here. Sign in or register to get started.