Dear Rolf,

Rolf Turner wrote:

On 25/06/2009, at 12:27 PM, Craig P. Pyrame wrote:


Dear Stavros,

What you discuss below is somewhat scary to me as an R newbie.  Is this
just an incident, a bug perhaps, or rather the way things typically go
in R, as your "Welcome to R!" seems to suggest?  I have just started to
learn R, and my initial euphoria of the "I can do anything with it!"
sort is gradually turning into an "I can't get why it doesn't work" and
"I can't get how to make this work" depression.  I would be happy to
blame this on my incompetence and incapability, but would also like to
hear if it is not R itself that causes me to fail.

Do not get your knickers in a twist. R works simply and straightforwardly in simple straightforward situations. In less simple and less straightforward situations life gets more complicated. Don't dive into such situations without making sure you understand them. Check your results to make sure
    you have not overlooked a subtlety.


Yes, sure, but this sounds to me almost like what some others seem to have already suggested on this list - use R for tasks where you can simply apply any of the numerous excellent package functions (for example, to fit a model), but avoid using it for programming, because it inevitably leads to problems - is this what you are saying?

In respect of the current discussion of ifelse() --- the original problem arose because the values of ``yes'' and ``no'' were of different modes. It is obvious that in such instances a decision will have to be made about the mode of the result. The appropriateness of the designers' decision may be disputed, but you have to admit that some decision had to be made. Recognize that and all
    the mystery goes away.


I wasn't really updated on the original example, but yes, creating a programming language involves numerous difficult decisions that have to be made, often in a relatively ad hoc fashion. But once you point me to the original example, I have looked into what Stavros wrote, and the following strikes me as one of those cases where I would feel that either me or R is wrong:

  > ifelse(TRUE,factor('x'),factor('x')) => 1      (integer)

The man page Stavros quotes states that the class attribute of the result is taken from 'test', which clearly is not the case:

  > class(TRUE) => logical
  > class(ifelse(TRUE,factor('x'),factor('x'))) => integer

And also, I find myself incapable of making sense of the "may" in "the mode of the result may depend on the value of 'test'" - may in what sense? Will in 2.9 but not in 2.8? Will if test is logical but not if it is raw? I am not particularly into programming languages, and especially their semantics, so it may be my fault that I don't know what such "may" may mean, but I am not quite sure. Could you help me?

If you don't understand what's going on, then just stick to using ifelse() only
    when ``yes'' and ``no'' have the same mode.

Yes, in my poor R programming I make efforts to avoid involving myself in tricky situations, but it is not always helpful enough, I assure you.


Using things like as.raw() or taking one of ``yes'' and ``no'' to be a list is getting into territory where you need to be quite sophisticated and quite careful. Unless you are both, don't go there. I consider myself to be both (in respect of R at
    least) and I *still* would be very reluctant to go there.


I am not sure, is this supposed to be an argument in favor of using R?


Bottom line: R is easy to use at any level, but in order to use it a ``high'' level you need to understand the high level. Don't attempt to run before you can crawl.

I am a bit reluctant to tell you this, Rolf, as there is likely much my own fault involved, but I attempt to crawl, not to run, and this is where I get into pains with R. Examples such as those of Stavros have no place in my code, and yet I find it surprisingly difficult to understand why large parts of my code don't work as expected - having read the man pages carefully enough, I'd think.

Best regards,
Craig

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to