help assigning values to matrix
I think it would be easier to keep track of what you're doing, if you save
the assignment to the very end of your for() loop. For example ...
# create an empty matrix to be used as a template
Mtemplate <- matrix(data=NA, nrow=13, ncol=3,
dimnames=list(c(10,20,30,35,40,50,60,70,80,90,100,120,999),
c("col1", "col2", "col3")))
# create as many 13x3 matrices as vectors I have.
for (j in 1:length(mynames)) {
# do all your work with the matrix Mnew
Mnew <- Mtemplate
# The rowname of the last row will be the length of the vector
dimnames(Mnew)[[1]][dim(Mnew)[1]] <- length(get(mynames[j]))
# Example: assign three values in the last row of the created matrices
Mnew[13, ] <- c(3, 4, 5)
# then, when you're all done, assign Mnew to the name you want to keep
Mname <- paste("results", mynames[j], 1, sep="_")
assign(Mname, Mnew)
}
Jean
On Tue, Apr 14, 2015 at 5:48 AM, David <dasolexa at hotmail.com> wrote:
Hi group, I am automatically creating several matrices to store results from different analyses on vectors of different lengths. The matrices are named according to each vector, so I can trace back results. I am using the following commands, which give me an error. My idea is to populate the for loop to include several steps and keep adding results to the matrices. But to start with:
ls()
[1] "PS013_1" "PS056_1" "PS058_1" "PS080_1" "PS117_1" "PS193_1" "PS194_1"
mynames<- c("PS013","PS056","PS058","PS080","PS117","PS193","PS194")
for (j in 1:length(mynames)) {
#create as many 13x3 matrices as vectors I have. The rowname of the last row will be the length of the vector
assign(paste("results",mynames[j],"1",sep="_"),matrix(data=NA,nrow=13,ncol=3,dimnames
=
list(c(10,20,30,35,40,50,60,70,80,90,100,120,print(length(get(paste(mynames[j],1,sep="_"))))),c("col1","col2","col3"))))
# Example: assign three values in the last row of the created matrices
assign(paste("results",mynames[j],"1",sep="_")[13,],c(3,4,5))
}
Error in paste("results", mynames[j], "1", sep = "_")[13, ] :
incorrect number of dimensions
I have noticed that to access the positions of a matrix I cannot use
[row,column] coordinates, but actual "count" positions like:
#let's write something in one of the matrices, since they are all NAs
results_PS013_1[1,]<-c(1,14,27)
get(paste("results",mynames[1],"1",sep="_"))
col1 col2 col3 10 1 14 27 20 NA NA NA 30 NA NA NA 35 NA NA NA 40 NA NA NA 50 NA NA NA 60 NA NA NA 70 NA NA NA 80 NA NA NA 90 NA NA NA 100 NA NA NA 120 NA NA NA 295 NA NA NA
get(paste("results",mynames[1],"1",sep="_"))[1]
[1] 1
get(paste("results",mynames[1],"1",sep="_"))[2]
[1] NA
get(paste("results",mynames[1],"1",sep="_"))[14]
[1] 14
get(paste("results",mynames[1],"1",sep="_"))[c(1,14,27)]
[1] 1 14 27 So if I try to write three other values to the first row of the first matrix, I now try the following
assign(get(paste("results",mynames[1],"1",sep="_"))[c(1,14,27)],c(3,4,5))
Error in assign(get(paste("results", mynames[1], "1", sep = "_"))[c(1, :
invalid first argument
Can anyone explain to me why I cannot assign the values in this way and
how is it that I cannot use [row,column] coordinates?
Thanks in advance for your help
Dave
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.