implicit return? [🇷 for BE/BA]

posted by ElMaestro  – Denmark, 2019-04-29 14:55 (1909 d 20:28 ago) – Posting: # 20262
Views: 6,973

Hi Hötzi,

❝ Use ifelse() for vectorized conditions. See this thread.


Try this:
library(microbenchmark)

x=round(runif(100),0)
Len=100

f1=function(x, Len)
{
 ifelse ((x==0), "foo", "bar")
}

f1(x, Len)


f2=function(x, Len)
{
 rslt=rep("foo", Len)
 for (i in 1:Len)
  if (x[i]) rslt[i]="bar"
 return(rslt)
}

f2(x, Len)



res <- microbenchmark(
                      f1(round(runif(Len),0), Len),
                      f2(round(runif(Len),0), Len),
                      times=3000L)
print(res)


note I am passing Len to f1 even though it is not used there in order to give the function call the same overhead, otherwise the comparison might be called unfair.

On my system f2 is a lot faster, so the advantage of runif may be solely syntactic and not in any way a true vectorisation advantage (easier but not more efficient).

Pass or fail!
ElMaestro

Complete thread:

UA Flag
Activity
 Admin contact
23,112 posts in 4,858 threads, 1,644 registered users;
78 visitors (1 registered, 77 guests [including 16 identified bots]).
Forum time: 11:24 CEST (Europe/Vienna)

It’s always fun to have your models validated,
but is way more fun to have them trashed.
Finding out you are completely wrong
is a great part of science.    G. Randall Gladstone

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5