Search code examples
rloopsiterationassign

R iterative assign using different data frames


I made a user defined function...

From a vector x, y, f(x,y) returns list of (x,y,z)...

Now I want to do iterations of

data1 <- f(x,y)
data2 <- f(data1$x, data1$y)
data3 <- f(data2$x, data2$y)
data4 <- f(data3$x, data3$y)

and so on...

Is there a way to make a loop for this?

I tried to use paste function

data1 <- f(x,y)
for (i = 2:10) {
    assign(paste("data",i,sep=""), f(paste("data",i-1,"$x",sep=""), paste("data",i-1,"$y",sep=""))
}

but it gets error since input becomes "data1$x" which is string not numeric.


Solution

  • As Vincent just replied you can make a list, and a list of lists etc. This will make it easier to produce what you want.

    I made an example for you:

    x <- 1:10; y <- 11:20
    f <- function(x, y) {return(list(x = x+1, y = y+1))}
    
    data <- c()
    data[[1]] <- f(x, y)
    for(i in 2:10){
      data[[i]] <- f(data[[i-1]]$x, data[[i-1]]$y)
    }
    

    You can then get x from time i with data[[i]]$x.