[R] Error with lapply
Marc Schwartz
marc_schwartz at comcast.net
Thu Nov 20 17:49:35 CET 2008
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
More information about the R-help
mailing list