Dear R users, I have a function (simplified here) that accepts two arguments and performs various calculations:
foo <- function(y, x) { a <- y*sqrt(x) b <- a+2 c <- a*b return(c) } If I call the function as follows I get the result I desire: > foo(.1, 1:12) [1] 0.2100000 0.3028427 0.3764102 0.4400000 0.4972136 0.5498979 0.5991503 0.6456854 0.6900000 0.7324555 0.7733250 [12] 0.8128203 or: > foo(.2, 1:12) [1] 0.4400000 0.6456854 0.8128203 0.9600000 1.0944272 1.2197959 1.3383005 1.4513708 1.5600000 1.6649111 1.7666499 [12] 1.8656406 what i'd like to do is run though a number of iterations of 'y' - say from .1 to 1 - for a range of x values (1:12 here, though in my actual code 1:100). I've had a go at automating this using sapply. The structure of the data.frame I create looks fine, but the content doesn't match my expectations. What I want is a data.frame that has the above vectors as columns (so, column 1 = the values for y=.1, column 2 = values for y=.2 etc... and the rows are the values of x for any given y). Here is my attempt at a solution, if anyone can point out what I'm doing wrong or suggest a simpler method, i'd be most grateful. best, Steve # ------------------------------------------------ calc <- function(w,s) { foo <- function(y=seq(.1, s/10, by=.1), x=1:w) { a <- y*sqrt(x) b <- a+2 c <- a*b return(c) } k <- function(s=10) { n <- 1:s m <- data.frame(1:s) m <- sapply(n, foo) rownames(m) <- 1:10 colnames(m) <- seq(.1, s/10, by=.1) return(m) } result <- k(s) return(result) } # ------------------------------------------------ calc(12, 10) 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1 3.000000 8.00000 15.00000 24.00000 35.00000 48.00000 63.0000 80.0000 99.0000 120.0000 2 4.828427 13.65685 26.48528 43.31371 64.14214 88.97056 117.7990 150.6274 187.4558 228.2843 3 6.464102 18.92820 37.39230 61.85641 92.32051 128.78461 171.2487 219.7128 274.1769 334.6410 4 8.000000 24.00000 48.00000 80.00000 120.00000 168.00000 224.0000 288.0000 360.0000 440.0000 5 9.472136 28.94427 58.41641 97.88854 147.36068 206.83282 276.3050 355.7771 445.2492 544.7214 6 10.898979 33.79796 68.69694 115.59592 174.49490 245.39388 328.2929 423.1918 530.0908 648.9898 7 12.291503 38.58301 78.87451 133.16601 201.45751 283.74902 380.0405 490.3320 614.6235 752.9150 8 13.656854 43.31371 88.97056 150.62742 228.28427 321.94113 431.5980 557.2548 698.9117 856.5685 9 15.000000 48.00000 99.00000 168.00000 255.00000 360.00000 483.0000 624.0000 783.0000 960.0000 10 16.324555 52.64911 108.97367 185.29822 281.62278 397.94733 534.2719 690.5964 866.9210 1063.2456 11 17.633250 57.26650 118.89975 202.53300 308.16625 435.79950 585.4327 757.0660 950.6992 1166.3325 12 18.928203 61.85641 128.78461 219.71281 334.64102 473.56922 636.4974 823.4256 1034.3538 1269.2820 -- View this message in context: http://n4.nabble.com/Using-sapply-on-a-two-argument-function-tp1477883p1477883.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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.