[R] problems with assign

Duncan Murdoch murdoch at stats.uwo.ca
Tue Apr 11 20:48:58 CEST 2006


On 4/11/2006 2:30 PM, Arnau Mir wrote:
> Hello.
> 
> I have n files in a directory: file1, ..., filen.
> 
> I read them with the following commands:
> 
> list=scan(file="list",what=list(nom=""))
> # in the file list, I have all the filenames.
> n=length(list[[1]])
> 
> for (i in 1:n){
>     aux <- paste("p",i,sep="")
>     assign(aux, as.matrix(read.table(list[[1]][i])))
> }
> 
> R creates the matrices p1,p2,...,pn.
> 
> I want to manipulate the matrices p1,...,pn and create new matrices
> pp1,...,ppn. The dimensions of matrices ppi must be 100x100.
> So, I do the following:
> 
> for (i in 1:n){
>      aux2 <- paste("pp",i,sep="")
>      assign(aux2, array(0,dim=c(100,100)))
> }
> 
> My question is the following:
> 
> I want to assign to the matrix ppi[1,1] the value of pi[1,1] for i=1,...,n.
> How can I do it?
> 
> 
> For i=1, I try:
> 
> assign("aux2[1,1]",as.matrix(read.table(list[[1]][1]))[1,1])
> 
> but it doesn't work because if I ask R:
> pp1[1,1]
> R responses 0 but the value of p1[1,1] is not 0.

Despite its appearance, the statement

pp2[1,1] <- p2[1,1]

doesn't do an assignment to pp2[1,1], it does an assignment to pp2 of 
the result of a call to the function "[<-".  See the R Language 
Definition, "Function Calls" section.

I really don't recommend working the way you want to.  You'd be much 
better off leaving everything in lists, say pp to hold your pp1 to ppn, 
and p to hold p1 to pn.  Then you could say

pp[[2]][1,1] <- p[[2]][1,1]

Duncan Murdoch




More information about the R-help mailing list