R-help users,
  Thanks in advance for any assistance ... I truly appreciate your expertise.  
I searched help and could not figure this out, and think you can probably offer 
some helpful tips. I apologize if I missed something, which I'm sure I probably 
did. 
   
  I have data for many "samples". (e.g. 1950, 1951, 1952, etc.)

  For each "sample", I have many data-frames. (e.g. temp.1952, births.1952, 
gdp.1952, etc.)

  (Because the data is rather "large" (and for other reasons), I have chosen to 
store the data as individual files, as opposed to a list of data frames.)
   
  I wish to write a function that enables me to "run" any of many custom 
"functions/processes" on each sample of data.

  I currently accomplish this by using a custom function that uses:
"eval(parse(t=text.i2)) ", and "gsub(pat, rep, x)" (this changes the "sample 
number" for each line of text I submit to "eval(parse(t=text.i2))" ).

  Is there a better/preferred/more flexible way to do this?

  One issue/obstacle that I have encountered: Some of the custom functions I 
use need to take as input the value of "d" in the loop below. 
(Please see the sample function "fn.mn.d" below.)
  
#creates sample data
temp.1951 <- c(11,13,15)
births.1951 <- c(123, 156, 178)
temp.1952 <- c(21,23,25)
births.1952 <- c(223, 256, 278)
#######################
#function that looks for a a pattern "pat.i" within "x", and replaces it with 
"rep"
recurse <- function(x, pat.i,rep.i) {
f <- function(x,pat,rep) if (mode(x) == "character") gsub(pat, rep, x)  else x
   if (length(x) == 0) return(x)
   if (is.list(x)) for(i in seq_along(x)) x[[i]] <- recurse(x[[i]], pat.i,rep.i)
   else x <- f(x,pat.i,rep.i)
   x
#f <- function(x) if (mode(x) == "character") gsub("a", "green", x)  else x
}# end recurse end
#######################
  #######################
#function that processes code submitted as "text.i" for each date in "dates.i"
fn.dateloop <- function(text.i, dates.i ) {
for(d in 1: length(dates.i) ) {
tempdate <- dates.i[d]
text.i2 <- recurse(text.i, pat.i='#', rep.i=tempdate)
temp0=eval(parse(t=text.i2)) 
tempname <- paste(names(temp0)[1], tempdate, sep='.')
save(list='temp0', file = tempname)
} # next d
} # end fn.dateloop
#######################
  #####################
#a sample custom function that I want to run on each sample of data
fn.mn <- function(x, y) {
res = x - y
names(res) = 'mn'
res
} 
#####################
#####################
#example of function that takes d as input...
#I have not been able to get this to work with the custom function 
"fn.dateloop" above
#I request assistance in learning how to accomplish this
fn.mn.d <- function(x, y, d) {x[d] - y[d]} 
#####################
  #####################
setwd('c:/') #specifies location where sample data will be saved
getwd() #checks location
fn.mn(x=temp.1951, y=births.1951)
fn.mn(x=temp.1952, y=births.1952)
#
fn.dateloop(text.i = "fn.mn(x=get('temp.#'), y=get('births.#') )" , 
dates.i=c('1951','1952') )
get(load('mn.1951'))
get(load('mn.1952'))
   
   
   

       
---------------------------------

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to