I have a 2 column data.frame: > d[1:5,] a b 1 80015 C 2 80016 B 3 80023 C 4 80062 B 5 80069 B I want to apply a function across each row: > for(i in 1:nrow(d)) { + myFun(con, d[i,]$a, d[i,]$b) + } How do I do this using apply()? I'm unsure how to tell apply() to pass data from columns a and b for a given row as arguments to the function myFun(). Thanks in advance for any pointers, Nathan -- -------------------------------------------------------- Dr. Nathan S. Watson-Haigh OCE Post Doctoral Fellow CSIRO Livestock Industries University Drive Townsville, QLD 4810 Australia Tel: +61 (0)7 4753 8548 Fax: +61 (0)7 4753 8600 Web: http://www.csiro.au/people/Nathan.Watson-Haigh.html
On Feb 7, 2010, at 8:26 PM, Nathan S. Watson-Haigh wrote:> I have a 2 column data.frame: > > > d[1:5,] > a b > 1 80015 C > 2 80016 B > 3 80023 C > 4 80062 B > 5 80069 B > > I want to apply a function across each row: > > > for(i in 1:nrow(d)) { > + myFun(con, d[i,]$a, d[i,]$b) > + } > > How do I do this using apply()? I'm unsure how to tell apply() to > pass data from columns a and b for a given row as arguments to the > function myFun().apply(d, 1, function(x) myFun(x[1], x[2]) ) The reason you cannot use the "$" operator is that the row is passed to the function as a vector, rather than as a list. -- David> > Thanks in advance for any pointers, > Nathan > > -- > -------------------------------------------------------- > Dr. Nathan S. Watson-Haigh > OCE Post Doctoral Fellow > CSIRO Livestock Industries > University Drive > Townsville, QLD 4810 > Australia > > Tel: +61 (0)7 4753 8548 > Fax: +61 (0)7 4753 8600 > Web: http://www.csiro.au/people/Nathan.Watson-Haigh.html > > ______________________________________________ > 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.
On 02/08/2010 12:26 PM, Nathan S. Watson-Haigh wrote:> I have a 2 column data.frame: > > > d[1:5,] > a b > 1 80015 C > 2 80016 B > 3 80023 C > 4 80062 B > 5 80069 B > > I want to apply a function across each row: > > > for(i in 1:nrow(d)) { > + myFun(con, d[i,]$a, d[i,]$b) > + } > > How do I do this using apply()? I'm unsure how to tell apply() to pass > data from columns a and b for a given row as arguments to the function > myFun(). >Hi Nathan, apply doesn't work with data frames unless they can be coerced to matrices or arrays (and sometimes not even then). What's wrong with using the code you have above? Jim