Hello,

You should post your questions to r-help@r-project.org, the odds of getting more and better answers are greater.

As for the question, try the following. Note that the functions now have an extra argument.



incub <- function(x, n = 2){
  x$Incubation <- 0
  x$Incubation[1] <- x$Symptomes[1]
  if(nrow(x) >= n)
    x$Incubation[2] <- sum(x$Symptomes[seq_len(n)])
  for(i in seq_len(nrow(x))[-seq_len(n)])
    x$Incubation[i] <- sum(x$Symptomes[i - (seq_len(n) - 1)])
  x
}


contag <- function(x, n = 7){
  x$CONTAGIEUX <- 0
  for(i in 1:min(nrow(x), n))
    x$CONTAGIEUX[i] <- sum(x$Symptomes[1:i], na.rm = TRUE)
  for (i in seq_len(nrow(x))[-seq_len(n)]) {
    x$CONTAGIEUX[i] <- x$Symptomes[i] + x$CONTAGIEUX[i-1] -
      x$Symptomes[i-n]
  }
  x
}

incub_ARGENTINA <-incub(ARGENTINA, 2)
incub_ARGENTINA
contag_ARGENTINA <-contag(ARGENTINA, 7)
contag_ARGENTINA
derdata_ARGENTINA <-merge(contag_ARGENTINA, incub_ARGENTINA)
derdata_ARGENTINA


Hope this helps,

Rui Barradas


Em 29-08-2013 08:31, teko maurice escreveu:


Dear Rui,
Long time!!!!!
I came to ask for advice and help if you have time.
I am on my PHD developping all to model pandemic.
I have post on R help but nobody answer me,maybe it's so specific.
So i back to you if you can help me.
Hello all,
I have such a datasets for a pandemic virus.
  DATE Algeria Antigua.and.Barbuda ARGENTINA AUSTRALIA AUSTRIA Bahamas
1  2009-04-24       0                   0         0         0       0       0
2  2009-04-26       0                   0         0         0       0       0
3  2009-04-27       0                   0         0         0       0       0
4  2009-04-28       0                   0         0         0       0       0
5  2009-04-29       0                   0         0         1       0       0
6  2009-04-30       0                   0         0         1       0       0
7  2009-05-01       0                   0         0         1       0       0
8  2009-05-02       0                   0         0         1       0       0
9  2009-05-03       0                   0         0         1       0       0
10 2009-05-04       0                   0         0         1       0       0
11 2009-05-05       0                   0         0         1       0       0
12 2009-05-06       0                   0         0         1       0       0
13 2009-05-07       0                   0         0         1       0       0
14 2009-05-08       0                   0         0         1       0       0
15 2009-05-09       0                   0         1         2       0       0
16 2009-05-10       0                   0         1         2       0       0
17 2009-05-11       0                   0         1         1       1       0
18 2009-05-12       0                   0         1         1       1       0
19 2009-05-13       0                   0         1         1       1       0
20 2009-05-14       0                   0         1         1       1       0
21 2009-05-15       0                   0         1         1       1       0
22 2009-05-16       0                   0         1         1       1       0
23 2009-05-17       0                   0         1         1       1       0
24 2009-05-18       0                   0         1         1       1       0
25 2009-05-19       0                   0         1         1       1       0
26 2009-05-20       0                   0         1         1       1       0
27 2009-05-21       0                   0         1         3       1       0
28 2009-05-22       0                   0         1         7       1       0
29 2009-05-23       0                   0         1        12       1       0
30 2009-05-25       0                   0         2        16       1       0
31 2009-05-26       0                   0         5        19       1       0
32 2009-05-27       0                   0        19        39       1       0
33 2009-05-29       0                   0        37       147       1       0
34 2009-06-01       0                   0       100       297       1       1
35 2009-06-03       0                   0       131       501       1       1
36 2009-06-05       0                   0       147       876       2       1
37 2009-06-08       0                   0       202      1051       5       1
38 2009-06-10       0                   0       235      1224       5       2
39 2009-06-11       0                   0       256      1307       7       1
40 2009-06-12       0                   0       343      1307       7       1
41 2009-06-15       0                   0       343      1823       7       1
42 2009-06-17       0                   0       733      2112       7       2
43 2009-06-19       0                   0       918      2199       8       2
44 2009-06-22       1                   0      1010      2436       9       2
45 2009-06-24       3                   2      1213      2857      12       6
46 2009-06-26       2                   2      1391      3280      12       4
47 2009-06-29       2                   2      1488      4038      12       4
48 2009-07-01       2                   2      1587      4090      15       6
49 2009-07-03       5                   2      1587      4568      15       6
50 2009-07-06       5                   2      2485      5298      19       7

...
# I transform the date in numeric
t1<-derdata[["DATE"]]
t <- as.numeric(t1)
t
#i add the numeric date to the dataset
Mydata<-data.frame(derdata,t)
Mydata
# I select each country
ARGENTINA<- subset(Mydata,select = c(DATE,t,Canada))
names(ARGENTINA)[3] <- "Symptomes"
ARGENTINA

##### I create two functions because i want to create two variables by country 
:Incubation and CONTAGIEUX

##### 1. Here is the incubation function (a person getting a virus  ,incub the 
virus for a certain time : 2 days)
incub <- function(x){
   x$Incubation <- 0
   x[order(x$t),]
   x$Incubation[1] <- x$Symptomes[1]
   if(nrow(x) > 1)
     x$Incubation[2] <- sum(x$Symptomes[1:2])
   for(i in seq_len(nrow(x))[-(1:2)])
     x$Incubation[i] <- sum(x$Symptomes[i - (0:1)])
   x
}

2. Contagion function (after incubing the virus, the subject can spread now the 
virus for the 7 coming days)

contag <- function(x){
   x$CONTAGIEUX <- 0
   for(i in 1:min(nrow(x), 7))
     x$CONTAGIEUX[i] <- sum(x$Symptomes[1:i], na.rm = TRUE)
   for (i in seq_len(nrow(x))[-(1:7)]) {
     x$CONTAGIEUX[i] <- x$Symptomes[i] + x$CONTAGIEUX[i-1] -
       x$Symptomes[i-7]
   }
   x
}

# and So i obtain by country what i need.
incub_ARGENTINA <-incub(ARGENTINA)
incub_ARGENTINA
contag_ARGENTINA <-contag(ARGENTINA)
contag_ARGENTINA
derdata_ARGENTINA <-merge(contag_ARGENTINA, incub_ARGENTINA)
derdata_ARGENTINA



Now my problem is that i want to update those functions  incub  and contag  so 
that i can easily change the incubation and contagion period.
  they will not be fixe.
the incubation period can be 2 or 1 or 3 or 4 or 5 and so.
also the contagion period can be 4 or 5 or 6 or 8 or 9,......
And i want to not select the country before launch the the two funcions (incub  
and contag)
so that i have all the datasets for all country in the same dataset

Maurice









________________________________
  De : Rui Barradas <ruipbarra...@sapo.pt>
À : Jim Lemon <j...@bitwrit.com.au>
Cc : anoumou <teko_maur...@yahoo.fr>; r-help@r-project.org
Envoyé le : Mercredi 5 décembre 2012 16h26
Objet : Re: [R] Help for a function


Hello,

Also, t1 and min(xt) do not vary inside the loop so if it enters the
loop it never exits.
And

      res1[j] <-(a*h)
      res2 <-sum( res1[j])

is equivalent to

      res2 <- a*h

so the inner-most loop is not needed at all.

Hope this helps,

Rui Barradas
Em 05-12-2012 04:20, Jim Lemon escreveu:
On 12/05/2012 01:01 AM, anoumou wrote:
Hello all,
I need a help.
I am modeling a disease and a create a R function like that:
...
But i do not get the results,i try by all means but i d'ont
understant the
problem.

Hi anoumou,
Your function provides almost no indication of what two of its five
arguments are supposed to be. If, with a certain degree of optimistic
inference, we suppose "x" to be a data frame organized as shown below
the function. "t", "i" and "CONTAGIEUX" must be the appropriately
named columns of the data frame. This leaves two columns, "Symptomes"
and "Incubation". Say we flip a coin to decide which of these to
assign to "r", and with all of our degrees of freedom gone, we assume
that the other is "h". We are forced to the conclusion that "a" is a
nuisance argument, added to throw us off the scent.

Peering within the function, we notice that the date format is wrong,
braces are unmatched and that our data frame is alphabetically ordered
by name of country to no purpose whatsoever. The best I can do here is
to make the function potentially able to do something if you can work
out what to do with it.

Lambda<-function (x,date1,r,h,a) {
   ndate1 <- as.Date(date1, "%Y-%m-%d")
   t1 <- as.numeric(ndate1)
   x[order(x$i),]
   xt <-x[,"t"]
   xi <-x[,"i"]
   CONTAGIEUX <-x[,"CONTAGIEUX"]
   while ( t1 < min(xt) ){
    for (i in 1:length(xi) ){
     for (j in 1:CONTAGIEUX[length(CONTAGIEUX)]){
      res1[j] <-(a*h)
      res2 <-sum( res1[j])
     }
    }
   lambda[i] <- r*res2
   }
   x<-data.frame(x,lambda)
   x
}

Jim

______________________________________________
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.

______________________________________________
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