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.