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.