[R] Problems when Apply a script to a list

Joris Meys
Thu, 26 Aug 2010 10:31:06 -0000

Answers below.

On Thu, Aug 26, 2010 at 11:20 AM, Evgenia <evgts at aueb.gr>
wrote:
>
> Dear users,
>
> *******I have a function f to simulate data from a model (example below
used
> only to show my problems)
>
> f<-function(n,mean1){
> a<-matrix(rnorm(n, mean1 , sd = 1),ncol=5)
> b<-matrix(runif(n),ncol=5)
> data<-rbind(a,b)
> out<-data
> out}
>
> *********I want to simulate 1000 datasets (here only 5) so I use
> S<-list()
>
> for (i in 1:5){
> S[[i]]<-f(n=10,mean1=0)}
>
> ******I have a very complicated function ?for estimation of a model which I
> want to apply to Each one of the above simulated datasets
>
> fun<-function(data){data<-as.matrix(data)
> sink(' Example.txt',append=TRUE)
> ? ? ? ? ?cat("\n***********************\nEstimation
> \n********************\nDataset Sim : ",
> ? ? ? ? ? ?i )
> d<-data%*%t(data)
> s<-solve(d)
> print(s)
> out<-s
> out
> }
> results<-list()
> for (i in 1:5){results[[i]]<-fun(data=S[[i]])}
>
>
> My questions are:
> 1) for some datasets system is computational singular and this causes
> execution of the for to stop.By this way I have only results until this
> problem happens.How can I pass over the execution for this step and have
> results for All other datasets for which function fun is applicable?

see ?try, or ?tryCatch.

I'd do something in the line of
for(i in 1:5){
     tmp <- try(fun(data=S[[i]]))
     results[[i]] <- ifelse(is(tmp,"try-error"),NA,tmp)
}

Alternatively, you could also use lapply :
results <- lapply(S,function(x{
   tmp <- try(fun(data=x))
    ifelse(is(tmp,"try-error"),NA,tmp)
})

>
> 2) After some runs to my program, I receive this error message someError in
> sink("output.txt") : sink stack is full . How can I solve this
problem, as I
> want to have results of my program for 1000 datasets.

That is because you never empty the sink. add sink() after the last
line you want in the file. This will empty the sink buffer to the
file. Otherwise R keeps everything in the memory, and that gets too
full after a while.

>
> 3) Using for is the correct way to run my proram for a list
See the lapply solution.

>
> Thanks alot
>
> Evgenia
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/Problems-when-Apply-a-script-to-a-list-tp2339403p2339403.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
>



--
Joris Meys
Statistical consultant

Ghent University
Faculty of Bioscience Engineering
Department of Applied mathematics, biometrics and process control

tel : +32 9 264 59 87
Joris.Meys at Ugent.be
-------------------------------
Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php