Vectorize
As stated in the comments, you can vectorize to do this:
Vectorize creates a wrapper for a function that vectorizes the action of its FUN argument. Vectorize(FUN, vectorize.args = arg.names, SIMPLIFY = TRUE, USE.NAMES = TRUE)
(vstirling <- Vectorize(stirling)) # function (n, k) # { # args <- lapply(as.list(match.call())[-1L], eval, parent.frame()) # names <- if (is.null(names(args))) # character(length(args)) # else names(args) # dovec <- names %in% vectorize.args # do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]), # SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES)) # }
therefore vstirling() is a vector version of stirling() .
vstirling(20, 1:10) # [1] 1.000000e+00 5.242870e+05 5.806064e+08 4.523212e+10 7.492061e+11 4.306079e+12 1.114355e+13 1.517093e+13 # [9] 1.201128e+13 5.917585e+12
Now all that remains is to create a graph:
plot(x = 1:10, y = vstirling(20, 1:10), ylab = "S(20, x)", xlab = "x")
source share