on 11/20/2008 10:31 AM megh wrote: > I have written following codes, with intention to get a list with values > 1,2,9,16 : > > fn <- function(i) return(i^2) > lapply(1:4, fn, i) > > However I got following error : > Error in FUN(1:4[[1L]], ...) : unused argument(s) (1) > > Can anyone please tell me what will be the correct code here? > > Regards,
Try this: fn <- function(i) i^2 > lapply(1:4, fn) [[1]] [1] 1 [[2]] [1] 4 [[3]] [1] 9 [[4]] [1] 16 The error message indicates that the argument 'i' that you have in your initial attempt to use lappply() is unused, because the values 1:4 are passed to the function's first argument by default already. Thus, specifying 'i' again is an error, since there is not a second argument in your function fn(). Note also that 'return()' is not needed, as per the Details in ?return: "If the end of a function is reached without calling return, the value of the last evaluated expression is returned." Note also, that since lapply() effectively uses an internal loop, a faster "vectorized" approach would be: > as.list((1:4) ^ 2) [[1]] [1] 1 [[2]] [1] 4 [[3]] [1] 9 [[4]] [1] 16 For example, using 100,000 instead of 4: > system.time(x1 <- lapply(1:100000, fn)) user system elapsed 0.500 0.015 0.600 > system.time(x2 <- as.list((1:100000) ^ 2)) user system elapsed 0.018 0.004 0.039 > identical(x1, x2) [1] TRUE HTH, Marc Schwartz ______________________________________________ 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.