Dear R users, I have run into a problem using if...else and I hope you can shed some light on it. I am using R version 2.2.0.1.
I have the following data frame: > head(dat2f) year tot_km3y [1,] 1964 0.1876854 [2,] 1965 0.1835116 [3,] 1966 0.1915012 [4,] 1967 0.1869758 [5,] 1968 0.2249865 [6,] 1969 0.1916011 I need to pick out the median year, and since there are an even number of data, I cannot use 'median' directly since it gives me a non-existent year/discharge. I found a way to get around that with the following: 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))] (I really only need the year, not the actual discharge with that year, which is why I left med_TotQ as the true median) However, I have some data sets that have an odd number of data for which the following works perfectly: md <-dat2f[, list(med_year = year[which(tot_km3y == median(tot_km3y))], med_TotQ = median(tot_km3y))] Thus, I would like to apply the above calculations depended on the condition of: length(dat2f$year)%%2==0 I put it all together as below: 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))] } 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" 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 ______________________________________________ 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.