On Jun 24, 2011, at 7:47 AM, Petr PIKAL wrote:
Hi
Thank you for all your help! I did not know to use "" when
searching for
help, as ?mean, etc, had always worked for me in the past.
It makes perfect sense why 'else' was causing me the trouble the
way I
was
using it. I think it was working in my other code, despite the same
format, because it was part of a function and thus would have been
executed completely within the function?
Yes and no
if you made your function like that
fff<-function(x)
if (x>0) print("A")
else print("B")
you would get immediate error
else {
Error: unexpected 'else' in "else"
So you probably enclosed whole function into brackets like
fff<-function(x) {
if (x>0) print("A")
else print("B")
}
If you successfully get the code into a function there will be no
error. I suspect your demonstration of the error was at the console.
If you use Bert's "brace-enclosure" method to delay evaluation until
the full function is entered you get a working function that has no
braces in its body (as I showed earlier):
> {fntest <- function() if (FALSE) print("T")
+ else print("F") }
> fntest
function() if (FALSE) print("T")
else print("F")
> fntest()
[1] "F"
--
David.
and in that case you did not experienced this else problem not
because it
is a function but because you used those brackets.
Regards
Petr
Cheers,
Kara
________________________________________
From: Bert Gunter [gunter.ber...@gene.com]
Sent: June 23, 2011 8:27 AM
To: David Winsemius
Cc: Kara Przeczek; r-help@r-project.org
Subject: Re: [R] else problem
Perhaps some additional clarification... (???)
if (length(dat2f$year)%%2==0) {
md <-dat2f[, list(med_year = max(year[which(abs(tot_km3y -
median(tot_km3y)) == min(abs(tot_km3y - median(tot_km3y)))) ]),
med_TotQ =
median(tot_km3y))] }
else {
If this line is executed at a console session it will fail because
the
interpreter does not keep a copy of the last condition. If you moved
the
closing curley-brace to just befor the 'else', you should get the
behavior
you expect (if your other code is correct):
Well, um.. not sure if this is what you meant, but what is happening
at the console is that when you type <return>, the interpreter checks
for a syntactically complete statement. If it finds what has been
given to it **thus far** is, it tries to execute it (if not, it gives
a continuation character and waits for more input) and, as you said,
then starts anew to interpret the next line(s) entered, "forgetting"
all previous. The problem above is that the" if()" statement up to
the
close bracket, "}" is syntactically complete, and so the "else{" that
follows makes no sense as the beginnig of a new line to be
interpreted.
The simplest and universal solution to this is to simply enclose the
whole conditional in" { }":
{if(length ...
...
else {...}
}
This forces the interpreter to wait for the last "}" before it will
interpret and execute.
Hoping this clarifies rather than obfuscates.
-- Bert
Try instead:
if (length(dat2f$year)%%2==0) {
md <-dat2f[, list(med_year = max(year[which(abs(tot_km3y -
median(tot_km3y)) == min(abs(tot_km3y - median(tot_km3y)))) ]),
med_TotQ =
median(tot_km3y))]
} else {
md <-dat2f[, list(med_year = year[which(tot_km3y ==
median(tot_km3y))],
med_TotQ = median(tot_km3y))]
}
md <-dat2f[, list(med_year = year[which(tot_km3y ==
median(tot_km3y))],
med_TotQ = median(tot_km3y))]
}
Each individual piece works perfectly on its own, but together I
get
the
following error:
if (length(dat2f$year)%%2==0) {
+ md <-dat2f[, list(med_year = max(year[which(abs(tot_km3y -
median(tot_km3y)) == min(abs(tot_km3y - median(tot_km3y)))) ]),
med_TotQ =
median(tot_km3y))] }
else {
Error: unexpected 'else' in "else"
md <-dat2f[, list(med_year = year[which(tot_km3y ==
median(tot_km3y))],
med_TotQ = median(tot_km3y))]
}
Error: unexpected '}' in " }"
When I tried to look up "else" I got this error:
?else
Error: unexpected 'else' in "?else"
Try instead:
?"else"
--
David
I have used exactly the same set up with if...else in other code
and
it
worked fine then. I tried to run it again, and I got the same error
as
above. What is the problem? I hope it isn't something simple and
silly!
I realize that I can use the first line:
md <- dat2f[, list(med_year = max(year[which(abs(tot_km3y -
median(tot_km3y)) == min(abs(tot_km3y - median(tot_km3y)))) ]),
med_TotQ =
median(tot_km3y))]
for all data sets and it will give me the median for both odd and
even-length data sets, but it is now about the principle; why won't
the
if...else work?
Thank you very much for your time!
Kara
David Winsemius, MD
West Hartford, CT
______________________________________________
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.
--
"Men by nature long to get on to the ultimate truths, and will often
be impatient with elementary studies or fight shy of them. If it were
possible to reach the ultimate truths without the elementary studies
usually prefixed to them, these would not be preparatory studies but
superfluous diversions."
-- Maimonides (1135-1204)
Bert Gunter
Genentech Nonclinical Biostatistics
______________________________________________
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.
______________________________________________
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.
David Winsemius, MD
West Hartford, CT
______________________________________________
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.