On Thu, 18 Nov 2004, Stijn Lievens wrote:

<code>
add.fun <- function(perf.data) {
ss <- 0
for (i in 0:29) {
ss <- ss + cor(subset(perf.data, dataset == i)[3], subset(perf.data, dataset == i)[7], method = "kendall")
}
ss }
</code>


As one can see this function uses a for-loop. Now chapter 9 of 'An introduction to R' tells us that we should avoid for-loops as much as possible.


You don't say whether `dataset' is the name of a column in `perf.data'. Assuming it is, and assuming that 0:29 are all the values of `dataset'

sum(by(perf.data, list(perf.data$dataset),
          function(d)  cor(d[,3],d[,7], method="kendall")))

would work. If this is faster it will be because you don't call subset() twice per iteration, rather than because you are avoiding a loop. However it has other benefits: it doesn't have the variable `i', it doesn't have to change the value of `ss', and it doesn't have the range of `dataset' hard-coded into it. These are all clarity optimisations.

        -thomas

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to