Hi all. How we evaluate a formula in R? Ex.: params <- list(a = 2, b = 3) x <- seq(1,10, length.out = 100) func1 <- as.formula("y ~ a*x^2 + b*x") ##How to evaluate func1 using x and the params list ??? Thank you in advance, Phil [[alternative HTML version deleted]]
On Fri, Jan 16, 2015 at 3:16 AM, philippe massicotte <pmassicotte at hotmail.com> wrote:> Hi all. > > How we evaluate a formula in R? > > Ex.: > > params <- list(a = 2, b = 3) > x <- seq(1,10, length.out = 100) > > func1 <- as.formula("y ~ a*x^2 + b*x") > > ##How to evaluate func1 using x and the params list > ??? > > > Thank you in advance, > PhilRemove the lhs of the formula giving fo; then use fn$ from gsubfn to turn fo into a function, func, and call it using do.call. library(gsubfn) fo <- formula(sub(".*~", "~", deparse(func1))) func <- fn$identity(fo) do.call(func, c(list(x = x), params)) -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
You may use 'eval()' with 'parse()' if you wish to use 'formula()' as below: > a <- params[[1]] > b <- params[[2]] > eval(parse(text=func1)) [1] 5.000000 5.652893 6.338843 7.057851 7.809917 8.595041 [7] 9.413223 10.264463 11.148760 12.066116 13.016529 14.000000 [13] 15.016529 16.066116 17.148760 18.264463 19.413223 20.595041 [19] 21.809917 23.057851 24.338843 25.652893 27.000000 28.380165 [25] 29.793388 31.239669 32.719008 34.231405 35.776860 37.355372 [31] 38.966942 40.611570 42.289256 44.000000 45.743802 47.520661 [37] 49.330579 51.173554 53.049587 54.958678 56.900826 58.876033 [43] 60.884298 62.925620 65.000000 67.107438 69.247934 71.421488 [49] 73.628099 75.867769 78.140496 80.446281 82.785124 85.157025 [55] 87.561983 90.000000 92.471074 94.975207 97.512397 100.082645 [61] 102.685950 105.322314 107.991736 110.694215 113.429752 116.198347 [67] 119.000000 121.834711 124.702479 127.603306 130.537190 133.504132 [73] 136.504132 139.537190 142.603306 145.702479 148.834711 152.000000 [79] 155.198347 158.429752 161.694215 164.991736 168.322314 171.685950 [85] 175.082645 178.512397 181.975207 185.471074 189.000000 192.561983 [91] 196.157025 199.785124 203.446281 207.140496 210.867769 214.628099 [97] 218.421488 222.247934 226.107438 230.000000 > Or, you can define your own function as below: > fn <- function(x, a, b)a*x^2 + b*x > fn(x=x, a=params[[1]], b=params[[2]]) [1] 5.000000 5.652893 6.338843 7.057851 7.809917 8.595041 [7] 9.413223 10.264463 11.148760 12.066116 13.016529 14.000000 [13] 15.016529 16.066116 17.148760 18.264463 19.413223 20.595041 [19] 21.809917 23.057851 24.338843 25.652893 27.000000 28.380165 [25] 29.793388 31.239669 32.719008 34.231405 35.776860 37.355372 [31] 38.966942 40.611570 42.289256 44.000000 45.743802 47.520661 [37] 49.330579 51.173554 53.049587 54.958678 56.900826 58.876033 [43] 60.884298 62.925620 65.000000 67.107438 69.247934 71.421488 [49] 73.628099 75.867769 78.140496 80.446281 82.785124 85.157025 [55] 87.561983 90.000000 92.471074 94.975207 97.512397 100.082645 [61] 102.685950 105.322314 107.991736 110.694215 113.429752 116.198347 [67] 119.000000 121.834711 124.702479 127.603306 130.537190 133.504132 [73] 136.504132 139.537190 142.603306 145.702479 148.834711 152.000000 [79] 155.198347 158.429752 161.694215 164.991736 168.322314 171.685950 [85] 175.082645 178.512397 181.975207 185.471074 189.000000 192.561983 [91] 196.157025 199.785124 203.446281 207.140496 210.867769 214.628099 [97] 218.421488 222.247934 226.107438 230.000000 > Is this what you are looking for? I hope this helps. Chel Hee Lee On 01/16/2015 02:16 AM, philippe massicotte wrote:> Hi all. > > How we evaluate a formula in R? > > Ex.: > > params <- list(a = 2, b = 3) > x <- seq(1,10, length.out = 100) > > func1 <- as.formula("y ~ a*x^2 + b*x") > > ##How to evaluate func1 using x and the params list > ??? > > > Thank you in advance, > Phil > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >