R inferno (without rant) [Software]

posted by d_labes  – Berlin, Germany, 2015-10-28 10:18 (3463 d 14:08 ago) – Posting: # 15586
Views: 7,138

Dear Helmut,

ifelse (x1 < x2,

❝   cat(x1, "less than", x2, "\n"),
❝   cat(x1, "at least", x2, "\n"))


12 less than 13

Error in ifelse(x1 < x2, cat(x1, "less than", x2, "\n"), cat(x1, "at least",  :

❝   replacement has length zero

❝ In addition: Warning message:

❝ In rep(yes, length.out = length(ans)) :

❝   'x' is NULL so the result will be NULL

❝    What the f…k?


Not only SAS is a beast :-D.

ifelse() is a (vectorized) function for conditional replacement / selection of values, not for conditional doing sumfink like output with cat().

From the man page of ifelse():
Usage
ifelse(test, yes, no)

Arguments
test  an object which can be coerced to logical mode.
yes   return values for true elements of test.
no    return values for false elements of test.

What is the return value of cat()?:
x <- cat("sumfink\n")
x


Gives NULL.

From the man page of cat():
Value
None (invisible NULL).


All the f#+~ing behaviour as described and documented. No reason to rant :cool:.
For some inferno <- TRUE see Patrick Burns "R Inferno" Circle 3.2 and 8.2.7


If you really need a vectorized solution (if x1, x2 are vectors) I suggest the following:
cat(ifelse(x1 < x2,
           paste0(x1, " less than ", x2),
           paste0(x1, " at least ", x2 )
          ), sep="\n")


Try it with
x1 <- c(12, 13)
x2 <- c(13, 12)


BTW: Works of course also if x1 and x2 are scalars as in your example :thumb up:.

Regards,

Detlew

Complete thread:

UA Flag
Activity
 Admin contact
23,424 posts in 4,927 threads, 1,670 registered users;
22 visitors (0 registered, 22 guests [including 6 identified bots]).
Forum time: 01:26 CEST (Europe/Vienna)

The combination of some data and an aching desire
for an answer does not ensure that a reasonable answer
can be extracted from a given body of data.    John W. Tukey

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