Hi all, I would like to replace the for loop in the code below with a function to improve the speed and to make the script more efficient. The loop creates a vector of integers (x) with the probability of f for each integer. The length of f is variable, but sums to 1. I tried to use a function with optional arguments which did not work. Here is the code: f <- data.matrix(c(0.5,0.15,0.35)) u <- runif(50) x <- data.matrix(rep(1, n)) fc <- 0 for(i in 1:length(f)) { fc <- fc + f[i] cf <- ifelse(u>fc,1,0) x <- x + cf } x Can anyone help me with this translation? Thanks in advance, Iris
Hi Iris, maybe I misinterpret this, but I think in the end it all comes down to sample(1:3,50,prob=c(0.5,0.15,0.35),replace=T)) cheers Am 19.09.2011 17:16, schrieb Eekhout, I.:> Hi all, > > I would like to replace the for loop in the code below with a function > to improve the speed and to make the script more efficient. > The loop creates a vector of integers (x) with the probability of f for > each integer. > The length of f is variable, but sums to 1. > I tried to use a function with optional arguments which did not work. > > Here is the code: > > f <- data.matrix(c(0.5,0.15,0.35)) > u <- runif(50) > x <- data.matrix(rep(1, n)) > fc <- 0 > for(i in 1:length(f)) { > fc <- fc + f[i] > cf <- ifelse(u>fc,1,0) > x <- x + cf > } > x > > Can anyone help me with this translation? > Thanks in advance, > > Iris > > ______________________________________________ > 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.-- Eik Vettorazzi Institut f?r Medizinische Biometrie und Epidemiologie Universit?tsklinikum Hamburg-Eppendorf Martinistr. 52 20246 Hamburg T ++49/40/7410-58243 F ++49/40/7410-57790 -- Pflichtangaben gem?? Gesetz ?ber elektronische Handelsregister und Genossenschaftsregister sowie das Unternehmensregister (EHUG): Universit?tsklinikum Hamburg-Eppendorf; K?rperschaft des ?ffentlichen Rechts; Gerichtsstand: Hamburg Vorstandsmitglieder: Prof. Dr. J?rg F. Debatin (Vorsitzender), Dr. Alexander Kirstein, Joachim Pr?l?, Prof. Dr. Dr. Uwe Koch-Gromus
sorry, there is a superfluous bracket at the end of the line, it should be read as sample(1:3,50,prob=c(0.5,0.15,0.35),replace=T) Am 19.09.2011 19:08, schrieb Eik Vettorazzi:> Hi Iris, > maybe I misinterpret this, but I think in the end it all comes down to > sample(1:3,50,prob=c(0.5,0.15,0.35),replace=T)) > > cheers > > Am 19.09.2011 17:16, schrieb Eekhout, I.: >> Hi all, >> >> I would like to replace the for loop in the code below with a function >> to improve the speed and to make the script more efficient. >> The loop creates a vector of integers (x) with the probability of f for >> each integer. >> The length of f is variable, but sums to 1. >> I tried to use a function with optional arguments which did not work. >> >> Here is the code: >> >> f <- data.matrix(c(0.5,0.15,0.35)) >> u <- runif(50) >> x <- data.matrix(rep(1, n)) >> fc <- 0 >> for(i in 1:length(f)) { >> fc <- fc + f[i] >> cf <- ifelse(u>fc,1,0) >> x <- x + cf >> } >> x >> >> Can anyone help me with this translation? >> Thanks in advance, >> >> Iris >> >> ______________________________________________ >> 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. > >-- Eik Vettorazzi Department of Medical Biometry and Epidemiology University Medical Center Hamburg-Eppendorf Martinistr. 52 20246 Hamburg T ++49/40/7410-58243 F ++49/40/7410-57790 -- Pflichtangaben gem?? Gesetz ?ber elektronische Handelsregister und Genossenschaftsregister sowie das Unternehmensregister (EHUG): Universit?tsklinikum Hamburg-Eppendorf; K?rperschaft des ?ffentlichen Rechts; Gerichtsstand: Hamburg Vorstandsmitglieder: Prof. Dr. J?rg F. Debatin (Vorsitzender), Dr. Alexander Kirstein, Joachim Pr?l?, Prof. Dr. Dr. Uwe Koch-Gromus
Eekhout, I. wrote on 09/19/2011 10:16:17 AM:> > Hi all, > > I would like to replace the for loop in the code below with a function > to improve the speed and to make the script more efficient. > The loop creates a vector of integers (x) with the probability of f for > each integer. > The length of f is variable, but sums to 1. > I tried to use a function with optional arguments which did not work. > > Here is the code: > > f <- data.matrix(c(0.5,0.15,0.35)) > u <- runif(50) > x <- data.matrix(rep(1, n)) > fc <- 0 > for(i in 1:length(f)) { > fc <- fc + f[i] > cf <- ifelse(u>fc,1,0) > x <- x + cf > } > x > > Can anyone help me with this translation? > Thanks in advance, > > IrisThere was no "n" in the sample code you shared. I assumed n=50. n <- 50 f <- data.matrix(c(0.5, 0.15, 0.35)) u <- runif(n) res <- outer(u, cumsum(f), ">") x <- rowSums(res) + 1 x Jean [[alternative HTML version deleted]]