how to rewrite this without a loop ?
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