[R] create vectors within a double loop
Nikos Alexandris
nikos.alexandris at felis.uni-freiburg.de
Sat May 23 23:49:06 CEST 2009
jim holtman:
> You might want to look at how to use 'lapply' to create lists. Here
> is one way of doing it:
>
> > # create test data
> > a_threshold <- b_threshold <- as.data.frame(matrix(sample(c(1:5,
> NA), 100, TRUE), 10))
> > classification <- c('a', 'b')
> > result <- lapply(classification, function(.cls){
> + colSums(!is.na(get(paste(.cls, '_threshold', sep=''))))
> + })
Jim, thank you for your time. You saved my day ;-).
Just for your interest, my code (even if not elegant) works also with
"colSums()". Great function. Of course, the lapply() is probably the
elegant solution to many tasks like mine.
Kindest regards, Nikos
> The code
# loop over "classifications"
for (x in classifications) {
# loop over sequence 1 to 10
for (i in 1:10)
# store sum's per "source" column
assign ( (paste ( x, "_sums", sep = "" )[i],
# changed from sum to colSums
colSums ( !is.na (
get ( paste ( x, "_thresholds", sep = "" ) ) # removed the "[ ,i]" #
)
)
)
}
The 2nd question remains or it is again solved with an _apply()_
function. Maybe I'll find the answer in R_inferno?
> Questions
--%<---
> 2. Related question: how can I print the structure of each
> column of each "classification" with a for loop?
> e.g.
> # a single loop work perfectly as follows:
> for (i in 1:10)
> str(burned_eig_normalised_cov.omission_thresholds[,i])
>
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> int [1:875] NA NA NA NA NA NA NA NA NA NA ...
> logi [1:875] NA NA NA NA NA NA ...
>
> # now, I would like to say
> for (x in classifications) { for (i in 1:10) str(paste(x,
> ".omission_thresholds", sep="")[,i]) }
>
> Error in paste(x, ".omission_thresholds", sep = "")[, i] :
> incorrect number of dimensions
>
> Why is this wrong? Given the common prefix, how can I "paste"
> the
> "prefix and the suffix" and access the columns?
More information about the R-help
mailing list