reduce the code used by "for"
x=c(1,2,NA,3,4,5)*10
> y=array(rep(x,15),c(5,3,2)) > dimnames(y)=list(1:5,letters[1:3],NULL) So to have in the workspace: > y , , 1 a b c 1 10 50 40 2 20 10 50 3 NA 20 10 4 30 NA 20 5 40 30 NA , , 2 a b c 1 30 NA 20 2 40 30 NA 3 50 40 30 4 10 50 40 5 20 10 50 Then to set the missing in the third row to 0: > y[3,,][which(is.na(y[3,,]))]=0 and to set the missing in the other rows to 1: > y[-3,,][which(is.na(y[-3,,]))]=1 domenico vistocco
Luis Ridao Cruz wrote:
R-help, I have a 3-way array:
dim(bugvinP)
[1] 13 14 3
The array looks something like this (object trimmed for readability)
, , slag = 1
ar
1994 1995 1996 1997 1998
1 NA 0.000 0.000 0.000 0.000
2 0.036 0.059 0.027 0.000 0.000
3 0.276 0.475 0.491 0.510 0.559
10 1.000 1.000 1.000 1.000 1.000
11 NA 1.000 1.000 NA 1.000
12 NA 1.000 1.000 1.000 1.000
13 NA 1.000 NA 1.000 NA
, , slag = 2
ar
1994 1995 1996 1997 1998
1 NA 0.000 0.000 0.000 0.000
2 0.129 0.029 0.011 0.026 0.000
9 1.000 1.000 1.000 1.000 1.000
10 1.000 1.000 1.000 1.000 1.000
11 1.000 1.000 1.000 1.000 1.000
12 1.000 1.000 1.000 1.000 1.000
13 NA NA 1.000 1.000 NA
I want to set NAs to 0 if the row names are e.g. 3
and 1 otherwise. To implement this I do the following which
is OK but I wish to find out a more compact/shorter version.
for(i in 1:3)
{
bugvinP[,,i] <- ifelse(as.numeric(rownames(bugvinP[,,i])) < 3 &
is.na(bugvinP[,,i]), 0
, ifelse(as.numeric(rownames(bugvinP[,,i])) > 9 & is.na(bugvinP[,,i]),
1, bugvinP))
}
Thanks in advance
version
_ platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status major 2 minor 6.1 year 2007 month 11 day 26 svn rev 43537 language R version.string R version 2.6.1 (2007-11-26)
______________________________________________ R-help at 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.