[R] matrix manipulation with a for loop
antonio rodriguez
antonio.raju at gmail.com
Wed Nov 1 19:33:42 CET 2006
Phil Spector escribió:
> Antonio -
> When you're operating on each column of a matrix, you really should
> consider the apply() function, which was written for the task. Also,
> it's usually easier to count things in R by taking the sum of a logical
> expression, rather than the length of a subsetted vector.
> Here's code that will solve your problem:
>
> apply(F.zoo,1,function(x)sum(x >=5 & x <= 9)/sum(!is.na(x))*100)
Dear Phil,
The problem is that the columns have some missing values (NA's) so the
result for:
apply(F.zoo,2,function(x)sum(x >=5 & x <= 9)/sum(!is.na(x))*100) # yields:
X.1 X.2 X.3 X.4 X.5 X.6 X.7 X.8 X.9 X.10 X.11 X.12 X.13
NA NA NA NA NA NA NA NA NA NA NA
NA NA
X.14 X.15 X.16 X.17 X.18 X.19 X.20 X.21 X.22 X.23 X.24 X.25
X.26
NA NA NA NA NA NA NA NA NA NA NA
NA NA
So it is supposed that using na.rm=T should do the task, but if I write:
apply(F.zoo,2,function(x)sum(F.zoo >=5 & F.zoo <=
9)/sum(!is.na(F.zoo))*100,na.rm=T)
I get:
Erro en FUN(newX[, i], ...) : unused argument(s) (na.rm = TRUE)
Antonio
>
> - Phil Spector
> Statistical Computing Facility
> Department of Statistics
> UC Berkeley
> spector at stat.berkeley.edu
>
>
> On Wed, 1 Nov 2006, antonio rodriguez wrote:
>
>> Hi,
>>
>> Having a matrix F.zoo (6575,189) with NA's in some columns I'm trying to
>> extract from each column the percent of days within an specific range,
>> so I've wrote this procedure:
>>
>> length(subset(F.zoo[,86],(F.zoo[,86]>=5) & (F.zoo[,86]<=
>> 9)))/(length(F.zoo[,86])-length(subset(F.zoo[,86],is.na(F.zoo[,86]))))*100
>>
>>
>> But to do this for each column (189) is pretty hard, so I want to write
>> a function in order to perform this automatically, such I have the
>> percent value corresponding to a specific column. I' tried these two
>> formulas but I can't get it. I think the problem is how to set the
>> initial values for the loop:
>>
>> Formula1:
>>
>> nnn<-function(x){for (i in F.zoo[,i]){
>> print(length(subset(F.zoo[,i],(F.zoo[,i]>=5) & (F.zoo[,i]<=
>> 9)))/(length(F.zoo[,i])-length(subset(F.zoo[,i],is.na(F.zoo[,i]))))*100)
>> }
>> }
>>
>> Formula 2:
>>
>> H<-t(matrix(1,189))
>>
>> nnn<-function(x){for (i in col(H){
>> print(length(subset(F.zoo[,i],(F.zoo[,i]>=5) & (F.zoo[,i]<=
>> 9)))/(length(F.zoo[,i])-length(subset(F.zoo[,i],is.na(F.zoo[,i]))))*100)
>> }
>> }
>>
>> Thanks,
>>
>> Antonio
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch 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.
>>
>
More information about the R-help
mailing list