You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量传入参数调用LSMonteCarlo包AmerPutLSM函数计算期权价格

批量调用AmerPutLSM计算美式看跌期权价格方案

你可以直接使用R的迭代映射函数批量传入数据框每行的参数,无需手动逐行赋值。以下是两种常用实现方法:

方法1:基础R原生mapply实现

# 加载依赖包
library(LSMonteCarlo)

# 假设你的期权数据框命名为opt_data
opt_prices <- mapply(
  FUN = function(Spot, sigma, Strike, r, dr, mT) {
    # 固定参数n、m直接写死在函数内,需要动态调整可改为参数传入
    AmerPutLSM(Spot = Spot, sigma = sigma, n = 500, m = 100, 
               Strike = Strike, r = r, dr = dr, mT = mT)
  },
  # 逐行传入数据框的对应列参数
  Spot = opt_data$UnderlyingPrice,
  sigma = opt_data$Volatility,
  Strike = opt_data$StrikePrice,
  r = opt_data$RfRate,
  dr = opt_data$DividendRate,
  mT = opt_data$Days2Exp
)

# 提取计算结果的价格值,新增到原数据框
opt_data$put_price <- sapply(opt_prices, function(x) x@price)

方法2:tidyverse生态purrr::pmap实现

适合习惯用dplyr链式操作的场景:

library(tidyverse)
library(LSMonteCarlo)

opt_data <- opt_data %>%
  mutate(
    put_price = pmap(
      .l = list(
        Spot = UnderlyingPrice,
        sigma = Volatility,
        Strike = StrikePrice,
        r = RfRate,
        dr = DividendRate,
        mT = Days2Exp
      ),
      .f = function(Spot, sigma, Strike, r, dr, mT) {
        res <- AmerPutLSM(Spot = Spot, sigma = sigma, n = 500, m = 100,
                          Strike = Strike, r = r, dr = dr, mT = mT)
        # 直接返回价格数值,不需要后续再解析S4对象
        return(res@price)
      }
    )
  )
# 需要把列表格式的put_price转为数值列的话,追加 %>% mutate(put_price = as.numeric(put_price))即可

小提示:如果n、m参数也需要按行自定义,直接把对应参数列添加到迭代列表中,替换掉写死的固定值即可。

内容的提问来源于stack exchange,提问作者LukeAJN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 23:06:02