SLiM Code |
slimr Equivalent |
Notes |
---|---|---|
something = "hello world"; print(something);
|
something <- "hello world" print(something) –OR– something = "hello world"; print(something);
|
In SLiM, semicolons at the end of lines are mandatory, and
assignment is always with = . In slimr, R-style assignment
operator <- is allowed and semicolons are optional. Code
will be appropriately converted to work in SLiM. |
return T; |
return(T); |
In SLiM, return is a keyword, but in R,
return is a function. Use return() in
slimr , which will be automatically converted for SLiM. Note
also that for TRUE and FALSE , SLiM uses
T and F , so use T and
F in slimr as well. |
cat(fixed ? “FIXED\\n" else "LOST\\n"); |
cat(fixed %?% “FIXED\\n" %else% "LOST\\n"); |
SLiM can make use of Eidos trinary operator ? , which is
a compact form of an if else statement, or a non-vectorized form of
ifelse() . slimr supports this by using the
operators %?% and %else% . |
if (fixed) cat("FIXED\\n"); else cat("LOST\\n");
|
if (fixed) cat("FIXED\\n"); else cat("LOST\\n");
|
If Else statement are formatted slightly differently between SLiM
and R. In SLiM, the else statement must follow a newline
after the final line of the if statement. In R, the
else statement must be on the same line as the final line
of the if statement. In slimr use the R form,
it will be converted to work with SLiM. |
sim.addSubpop("p1", 500); |
sim.addSubpop("p1", 500); –OR– sim$addSubpop("p1", 500); –OR– sim%.%Species$addSubpop("p1", 500);
|
The other varieties may look a little weird but they allow autocomplete to work in R. If you don’t need autocomplete it works best to just write as you would in SLiM. |
[id] [t1 [: t2]] first() { ... } |
slim_block([id,] [t1, [t2,]] first(), { ... }) |
This is how an Eidos block is specified in SLiM and slimr. Things
inside square brackets are optional. Instead of first() ,
any event or callback function can be used. id is a name
for the code block, t1 is the first time to run the block,
t2 is the last time. ... is arbitrary Eidos or
slimr code. |
1: late() { ... } |
slim_block(1, .., late(), { ... }) |
In SLiM, using t: , means to run the code from time
t until the end of the simulation. In slimr ,
this can be accomplished by using .. for the end time. |
do {...} while (runif(1) < 0.8);
|
proceed <- 0; while(proceed < 0.8) { ... proceed <- runif(1); } |
R does not have a do ... while loop construction, it
only has while loops. The main difference is that
do ... while tests the condition at the end of the
{...} code, whereas while() tests the
condition before the {...} code. Similar functionality can
be achieved with a slightly more verbose while loop in R,
which will also work in SLiM. |