简体   繁体   中英

Applying function to data.frame

I have a function with following which looks like

function(nsim = 10, maxN = 10000, mu = 0, sigma = 0.1, S0 = 100, endT = 1, K = 100){
     nsim+maxN+mu+sigma+S0+endT+K
}

(The function here is just given for simplicity, the actual funtion is a simple Black Sholes pricing model)

Now, I have a data.frame:

df <- expand.grid(nsim = 10,
            maxN = 10000,
            mu = c(0.05, 0.10, 0.15),
            sigma = c(0.2, 0.4, 0.6),
            S0 = seq(80,120, by = 1),
            endT = c(0.25, 0.50, 0.75),
            K = 100,
            sim = sprintf("Sim.%s", 1:10)
)

Which is just a collection of multiple values. Now the question is, how do I apply previous function to the data set to calculate a new column with values, but using the column values from each row as input?

You can use mapply :

apply_fun <- function(nsim = 10, maxN = 10000, mu = 0, sigma = 0.1, S0 = 100, endT = 1, K = 100){
  nsim+maxN+mu+sigma+S0+endT+K
}

df$price <- mapply(apply_fun, df$nsim, df$maxN, df$mu, df$sigma, df$S0, df$endT, df$K)

If you don't want to write each argument separately you can also use apply with do.call .

df$price <- apply(df[-ncol(df)], 1, function(x) do.call(apply_fun, as.list(x)))

You can add a column with mutate:

library(dplyr)
my_function <- function(nsim = 10, maxN = 10000, mu = 0, sigma = 0.1, S0 = 100, endT = 
1, K = 100){
  nsim+maxN+mu+sigma+S0+endT+K
}

df %>% 
  mutate(new_c = my_function(nsim, maxN, mu,sigma, S0, endT, K)) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM