[R] stop calculation in a function
Sarah Goslee
sarah.goslee at gmail.com
Thu May 10 12:59:43 CEST 2012
Well, if i goes from 2 to length(x) and you try to access x[i+1], of
course odd things will happen. Why not construct the loop to
(length(x)-1) instead, so that x[i+1] is defined.
Sarah
On Thu, May 10, 2012 at 5:14 AM, jeff6868
<geoffrey_klein at etu.u-bourgogne.fr> wrote:
> Hi dear R-users,
>
> I have a question about a function I'm trying to improve.
> How can I stop the function calculation at the last numeric value of my
> data?
> The problem is that the end of my data contains missing values (NAs). And
> the aim of my function is to compare the first numeric value with the next
> one (till the end). For the moment, It works well when my data doesn't
> contains any NAs at the end of my file. I think that the problem is, as I
> have NAs at the end of my data, R tries to compare my last numeric value
> with the next numeric value wich doesn't exists, and so tries to modify the
> length of my data (the error message is that the output has not the same
> length as the input).
> Could somebody tell me what I should modify or add in my function in order
> to fix this problem?
> Here's the function. Thanks for your advises!
>
> out2NA <- function(x,seuil){
> st1 = NULL
> # Temporal variable memorysing the last "correct" numeric value#
> temp <- st1[1] <- x[1]
> ind_temp <- 1
> # Max time gap between two comparisons #
> ecart_temps <- 10
> tps <- time(x)
>
> for (i in 2:length(x)){
> if((!is.na(x[i]))){
> if((tps[i]-tps[ind_temp] < ecart_temps) & (abs(x[i]-temp) > seuil)){
> #&(abs(x[i+1]-x[i])<1)){
> st1[i] <- NA
> }
> else {
> temp <- st1[i] <- x[i]
> ind_temp <- i
> }
> }
> }
> return(st1)
> }
>
> dat1 <- myts[,2]
> myts[,2] <- apply(dat1,2,function(x) out2NA(x,2))
>
> --
--
Sarah Goslee
http://www.functionaldiversity.org
More information about the R-help
mailing list