0

Somewhat new to R (coming from SQL), trying to write a quick loop to generate a series of functions that perform a task a specified number of times (i.e. for function 2, do something 2 times, function 3 -> 3 times, etc.).

My issue is arising in that I'm using the iterative variable (in the below code, 'k') as a part of the lower-level function - as such, when I go to evaluate ANY of the subsequently generated functions, it returns the value of the function as of the last value of k (here, 4), no matter if I call function 2, 3, or 4.

My question is therefore how can I substitute the value of 'k' for the variable 'k' when I'm generating the lower level functions? For example, on the first iteration, when k = 2, I want to substitute '2' for every occurrence of 'k' in the lower level function, such that when function 2 is run later, it sees the value of '2', rather than the last value of 'k'?

Code below (note that the 'x' value the function will evaluate is a 1 column, variable row matrix):

x <- as.matrix(11:20)

for (k in 2:4) {

  actvfun <- NULL

  actvfun <- function(x) {

    actv <- NULL
    actvmtx <- NULL
    actvmtx <- as.matrix(x)

    for (j in 2:(k+1)) {

      actv <- rep(NA, length(x))

      for (i in j:length(x)) {

        actv[i] <- x[i - (j - 1)]

      }

      actvmtx <- as.matrix(cbind(actvmtx, actv))

    }

    assign(paste("lag0", k, "av", sep=""), actvmtx)
    return(apply(get(paste("lag0", k, "av", sep="")), 1, mean, na.rm=T))
    assign(paste("LAGTEST0", k, "AV", sep=""), apply(actvmtx, 1, mean, na.rm=T))
  }


  assign(paste("v5LAGTEST0", k, ".av", sep=""), actvfun)
}


v5LAGTEST02.av(x)
v5LAGTEST03.av(x)

The last two items are the checks I was running - currently both return the result using k = 4, rather than their respective values of 2 and 3.

Any help is greatly appreciated - I know loops are somewhat frowned upon in R (as is 'assign', but I'm not sure how else to achieve the desired result of variable function names), so I'm certainly open to new suggestions!

Thanks,

Nate

desig_nate
  • 33
  • 4
  • 1
    you are more likely to get answers if you provide a [reproducible example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Henk Nov 04 '16 at 05:33
  • Using assign like that is frowned upon even more. – Roland Nov 04 '16 at 06:11

0 Answers0