Hello, I want to know what do you think about my function. I know that it isn't briliant :/ but what do you think? What I should do that my function will be better? (now is very slow and not ideal, sometimes I also get a mistake!) ########## My function ############################################# dzieci<-transform(dzieci, zywnosc=0) zywnoscCalosc<- function( jedzenie, sklep, n1, n2, n3, n4, d1, d2, d3, d4 ) { skl <- sklep wynik <- vector() wynik <- jedzenie ndf <- data.frame(nn1=n1,nn2=n2,nn3=n3,nn4=n4) ddf <- data.frame(dd1=d1,dd2=d2,dd3=d3,dd4=d4) for (i in 1:length(n1)){ wekt_n = ndf[i,] wekt_d = ddf[i,] wekt_n_ok = wekt_n[!is.na(wekt_n)] wekt_n_ok = as.numeric(wekt_n_ok) wekt_d_ok = wekt_d[!is.na(wekt_d)] wekt_d_ok = as.numeric(wekt_d_ok) dl_n = length(wekt_n_ok) dl_d = length(wekt_d_ok) if (skl[i] %in% NA){ wynik[i]=NA} else {wynik[i] sum(((1*wekt_n_ok)+(3*wekt_n_ok))/((1*dl_n)+(3*dl_d)))} } return (wynik) } ### Call function ### dzieci$zywnosc <- zywnoscCalosc(dzieci$zywnosc, dzieci$sklepik, dzieci$sklslodycze, dzieci$sklnapojegazowane, dzieci$sklfastfood, dzieci$sklsloneprzekaski, dzieci$sklmlekoiproduktymleczne, dzieci$sklwodamineralnasoki, dzieci$sklkanapki, dzieci$sklwarzywaiowoce) ##################################################################### And about mistake in my function: This is one row from my database where I get a mistake and I don't know why? sklepik; sklslodycze; sklnapojegazowane; 1 1 1 sklmlekoiproduktymleczne; sklfastfood; sklwodamineralnasoki; 1 1 1 sklsloneprzekaski; sklkanapki; sklwarzywaiowoce; 1 0 1 Afetr call my function I get as a result: dzieci$zywnosc[7590] [1] 1 But in my opinion I should get a value = 0.75 What is wrong? -- View this message in context: http://www.nabble.com/What-do-you-think-about-my-function--tp23831687p23831687.html Sent from the R help mailing list archive at Nabble.com.
It would help to explain the problem that the function is designed to solve. On Tue, Jun 2, 2009 at 9:35 AM, Grze? <gregorio99 at gmail.com> wrote:> > Hello, > I want to know what do you think about my function. I know that it isn't > briliant :/ but what do you think? What I should do that my function will be > better? (now is very slow and not ideal, sometimes I also get a mistake!) > > ########## My function ?############################################# > dzieci<-transform(dzieci, zywnosc=0) > > zywnoscCalosc<- function( jedzenie, sklep, n1, n2, n3, n4, d1, d2, d3, d4 ) > { > ? skl <- sklep > ? wynik <- vector() > ? wynik <- jedzenie > > ? ndf <- data.frame(nn1=n1,nn2=n2,nn3=n3,nn4=n4) > ? ddf <- data.frame(dd1=d1,dd2=d2,dd3=d3,dd4=d4) > > ? for (i in 1:length(n1)){ > > ? ? ?wekt_n = ndf[i,] > ? ? ?wekt_d = ddf[i,] > > ? ? ?wekt_n_ok = wekt_n[!is.na(wekt_n)] > ? ? ?wekt_n_ok = as.numeric(wekt_n_ok) > ? ? ?wekt_d_ok = wekt_d[!is.na(wekt_d)] > ? ? ?wekt_d_ok = as.numeric(wekt_d_ok) > > ? ? ?dl_n = length(wekt_n_ok) > ? ? ?dl_d = length(wekt_d_ok) > > ? ? ?if (skl[i] %in% NA){ wynik[i]=NA} > > ? ? ?else {wynik[i] > sum(((1*wekt_n_ok)+(3*wekt_n_ok))/((1*dl_n)+(3*dl_d)))} > ? ? ?} > return (wynik) > } > > ### Call function ### > > dzieci$zywnosc <- zywnoscCalosc(dzieci$zywnosc, dzieci$sklepik, > dzieci$sklslodycze, dzieci$sklnapojegazowane, dzieci$sklfastfood, > dzieci$sklsloneprzekaski, dzieci$sklmlekoiproduktymleczne, > dzieci$sklwodamineralnasoki, dzieci$sklkanapki, dzieci$sklwarzywaiowoce) > > ##################################################################### > > And about mistake in my function: > This is one row from my database where I get a mistake and I don't know why? > > sklepik; sklslodycze; sklnapojegazowane; > ? 1 ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ?1 > sklmlekoiproduktymleczne; sklfastfood; sklwodamineralnasoki; > ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ?1 > sklsloneprzekaski; sklkanapki; sklwarzywaiowoce; > ? 1 ? ? ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?1 > > Afetr call my function I get as a result: > dzieci$zywnosc[7590] > [1] 1 > But in my opinion I should get a value = 0.75 What is wrong? > > > -- > View this message in context: http://www.nabble.com/What-do-you-think-about-my-function--tp23831687p23831687.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. >-- Mike Lawrence Graduate Student Department of Psychology Dalhousie University Looking to arrange a meeting? Check my public calendar: http://tr.im/mikes_public_calendar ~ Certainty is folly... I think. ~
Hi without knowing what the function does and without some fake data available it is almost impossible to do evaluation. Few comments you apply some function to all rows of data frame hence think about apply instead for cycle you check NA values, try to look at complete cases your NA check in if clause is rather awkward if not wrong, use is.na() why do you get rid of NA, most R functions can handle them quite smoothly, through their na.action or na.rm options. Regards Petr r-help-bounces at r-project.org napsal dne 02.06.2009 14:35:00:> > Hello, > I want to know what do you think about my function. I know that it isn't > briliant :/ but what do you think? What I should do that my functionwill be> better? (now is very slow and not ideal, sometimes I also get amistake!)> > ########## My function ############################################# > dzieci<-transform(dzieci, zywnosc=0) > > zywnoscCalosc<- function( jedzenie, sklep, n1, n2, n3, n4, d1, d2, d3,d4 )> { > skl <- sklep > wynik <- vector() > wynik <- jedzenie > > ndf <- data.frame(nn1=n1,nn2=n2,nn3=n3,nn4=n4) > ddf <- data.frame(dd1=d1,dd2=d2,dd3=d3,dd4=d4) > > for (i in 1:length(n1)){ > > wekt_n = ndf[i,] > wekt_d = ddf[i,] > > wekt_n_ok = wekt_n[!is.na(wekt_n)] > wekt_n_ok = as.numeric(wekt_n_ok) > wekt_d_ok = wekt_d[!is.na(wekt_d)] > wekt_d_ok = as.numeric(wekt_d_ok) > > dl_n = length(wekt_n_ok) > dl_d = length(wekt_d_ok) > > if (skl[i] %in% NA){ wynik[i]=NA} > > else {wynik[i] > sum(((1*wekt_n_ok)+(3*wekt_n_ok))/((1*dl_n)+(3*dl_d)))} > } > return (wynik) > } > > ### Call function ### > > dzieci$zywnosc <- zywnoscCalosc(dzieci$zywnosc, dzieci$sklepik, > dzieci$sklslodycze, dzieci$sklnapojegazowane, dzieci$sklfastfood, > dzieci$sklsloneprzekaski, dzieci$sklmlekoiproduktymleczne, > dzieci$sklwodamineralnasoki, dzieci$sklkanapki, dzieci$sklwarzywaiowoce) > > ##################################################################### > > And about mistake in my function: > This is one row from my database where I get a mistake and I don't knowwhy?> > sklepik; sklslodycze; sklnapojegazowane; > 1 1 1 > sklmlekoiproduktymleczne; sklfastfood; sklwodamineralnasoki; > 1 1 1 > sklsloneprzekaski; sklkanapki; sklwarzywaiowoce; > 1 0 1 > > Afetr call my function I get as a result: > dzieci$zywnosc[7590] > [1] 1 > But in my opinion I should get a value = 0.75 What is wrong? > > > -- > View this message in context:http://www.nabble.com/What-do-you-think-about-> my-function--tp23831687p23831687.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 guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.