用户定义的函数输入可循环数据帧的每一行

用户名

我试图在R中创建自己的第一个项目,但遇到了障碍。

我有一个数据框,如下所示,其中每一行代表财务期权的数据集。

type <- c("C", "C")
marketV <- c(1.1166, 1.911)
S <- c(20, 60)
K <- c(20, 56)
T <- c(0.333, 0.5)
df <- data.frame(type, marketV, S, K, T)

我做了一个用户定义的函数,将该数据帧作为输入,并且当数据帧长一行时效果很好。但是,我不确定如何让我的函数遍历所有数据帧行并为所有行生成结果。

我是R的新手,所以不确定是否应该运行'for'循环或使用lapply,还是有简单的语法答案。我只是希望函数将df作为输入,但是对n行重复其计算,并产生n个结果。预先感谢您的帮助。

我当前的df功能代码,下面有1行作为参考:

游戏

这是程序的更正版本:

df <- data.frame(type=c("C", "C"), marketV=c(1.1166, 1.911), S=c(20, 60), K=c(20, 56), T=c(0.333, 0.5))

IV <- function(df) {
  # check if df has more then 1 row:
  if (nrow(df)>1) { message("!! nrow(df)>1 !!");  return(NA) }

  # Initializing of variables
  r <- 0
  sigma <- 0.3
  sigma_down <- 0.001
  sigma_up <- 1
  count <- 0

  type <- df$type; marketV <- df$marketV; S <- df$S; K <- df$K; T <- df$T

  d1 <- (log(S/K) + (sigma^2/2)*T)/(sigma*sqrt(T))
  d2 <- (log(S/K) - (sigma^2/2)*T)/(sigma*sqrt(T))

  if(type=="C") {
    V <- exp(-r*T)*(S*pnorm(d1) - K*pnorm(d2))
  } else {
    V <- exp(-r*T)*(K*pnorm(-d2) - S*pnorm(-d1)) }

  difference <- V - marketV

  # Root finding of sigma by Bisection method
  while(abs(difference)>0.001 && count<1000) {
    if(difference < 0) {
      sigma_down <- sigma
      sigma <- (sigma_up + sigma)/2 
    } else {
      sigma_up <- sigma
      sigma <- (sigma_down + sigma)/2
    }

    d1 <- (log(S/K) + (sigma^2/2)*T)/(sigma*sqrt(T))
    d2 <- d1 - sigma*sqrt(T)

    if(type=="C") {
      V <- exp(-r*T)*(S*pnorm(d1) - K*pnorm(d2))
    } else {
      V <- exp(-r*T)*(K*pnorm(-d2) - S*pnorm(-d1)) }

    difference <- V - marketV
    count <- count + 1
  }
  if(count == 1000){
    return(NA)          # If sigma to satisfy Black76 price cannot be found
  } else{
    return(sigma)
  }
}

sapply(split(df, seq(nrow(df))), IV)

最主要的是在数据帧中逐行运行。这是通过

sapply(split(df, seq(nrow(df))), IV)

您原始的函数中有很多错误:最大的错误是访问SK依此类推。您可能会考虑从数据框中获取值df但是实际上您是从工作空间中获取值的!我通过重新定义纠正了这一点:

type <- df$type; marketV <- df$marketV; S <- df$S; K <- df$K; T <- df$T

我针对中的行数插入了一个测试df,因此您将获得:

> IV(df)
!! nrow(df)>1 !!
[1] NA

这是程序的清理版本:

df <- data.frame(type=c("C", "C"), marketV=c(1.1166, 1.911), S=c(20, 60), K=c(20, 56), T=c(0.333, 0.5))

IV2 <- function(type, marketV, S, K, T) {
  r <- 0; sigma <- 0.3
  sigma_down <- 0.001; sigma_up <- 1
  count <- 0

  if(type=="C") {
    f.sig <- function(sigma)  {
      d1 <- (log(S/K) + (sigma^2/2)*T)/(sigma*sqrt(T))
      d2 <- d1 - sigma*sqrt(T)
      exp(-r*T)*(S*pnorm(d1) - K*pnorm(d2)) - marketV
    } 
  } else {
    f.sig <- function(sigma)  {
      d1 <- (log(S/K) + (sigma^2/2)*T)/(sigma*sqrt(T))
      d2 <- d1 - sigma*sqrt(T)
      exp(-r*T)*(K*pnorm(-d2) - S*pnorm(-d1)) - marketV
    }
  }
  ifelse(f.sig(sigma_down)*f.sig(sigma_up) < 0, uniroot(f.sig, c(sigma_down,sigma_up))$root, NA) # sigma
}

sapply(split(df, seq(nrow(df))), do.call, what="IV2")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

在不使用循环的情况下,选择R数据帧的不同元素(每一行一个,但可能不同的列)

来自分类Dev

如何将数据帧1的每一行与数据帧2的每一行进行比较?

来自分类Dev

将自定义函数应用于R中数据帧中每一行的两列

来自分类Dev

将向量减去到数据帧的每一行

来自分类Dev

R将数据帧的每一行分成两行

来自分类Dev

查找数据帧中每一行的出现次数

来自分类Dev

每输入一行返回多行/列的数据帧

来自分类Dev

我们可以使用一行数据帧作为函数的输入吗?

来自分类Dev

我们可以使用一行数据帧作为函数的输入吗?

来自分类Dev

数据帧中每一行的矩阵乘法

来自分类Dev

使用R中的Apply系列将2列数据帧的每一行传递给我创建的函数?

来自分类Dev

检查数据框中的每一行和每一列,并用用户定义函数替换值

来自分类Dev

创建一个将方程式应用于每一行的用户定义函数

来自分类Dev

循环遍历数据帧的每一行,并根据条件将元素添加到数据帧

来自分类Dev

在数据帧的每一行上应用函数并同时增加一个计数器

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

数据帧每一行的单个条形图

来自分类Dev

在R中打印合并数据帧的每一行

来自分类Dev

如何将数据帧1的每一行与数据帧2的每一行进行比较?

来自分类Dev

为R数据帧中的每一行绘制一个函数

来自分类Dev

如何将pv.uneven(FinCal库)(或任何带有向量作为输入的函数)应用于数据帧的每一行?

来自分类Dev

在R中为数据帧的每一行绘制不同的行

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

修改数据帧每一行中的值

来自分类Dev

Python - 遍历熊猫数据帧中每一行的函数

来自分类Dev

在 Pandas 数据帧上使用转换函数,为数据帧的每一行返回新值

来自分类Dev

在 Pandas 数据帧的每一行上应用函数

来自分类Dev

在数据帧的每一行上应用 SentimentIntensityAnalyzer 函数并提供情绪分数

Related 相关文章

  1. 1

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  2. 2

    在不使用循环的情况下,选择R数据帧的不同元素(每一行一个,但可能不同的列)

  3. 3

    如何将数据帧1的每一行与数据帧2的每一行进行比较?

  4. 4

    将自定义函数应用于R中数据帧中每一行的两列

  5. 5

    将向量减去到数据帧的每一行

  6. 6

    R将数据帧的每一行分成两行

  7. 7

    查找数据帧中每一行的出现次数

  8. 8

    每输入一行返回多行/列的数据帧

  9. 9

    我们可以使用一行数据帧作为函数的输入吗?

  10. 10

    我们可以使用一行数据帧作为函数的输入吗?

  11. 11

    数据帧中每一行的矩阵乘法

  12. 12

    使用R中的Apply系列将2列数据帧的每一行传递给我创建的函数?

  13. 13

    检查数据框中的每一行和每一列,并用用户定义函数替换值

  14. 14

    创建一个将方程式应用于每一行的用户定义函数

  15. 15

    循环遍历数据帧的每一行,并根据条件将元素添加到数据帧

  16. 16

    在数据帧的每一行上应用函数并同时增加一个计数器

  17. 17

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  18. 18

    数据帧每一行的单个条形图

  19. 19

    在R中打印合并数据帧的每一行

  20. 20

    如何将数据帧1的每一行与数据帧2的每一行进行比较?

  21. 21

    为R数据帧中的每一行绘制一个函数

  22. 22

    如何将pv.uneven(FinCal库)(或任何带有向量作为输入的函数)应用于数据帧的每一行?

  23. 23

    在R中为数据帧的每一行绘制不同的行

  24. 24

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  25. 25

    修改数据帧每一行中的值

  26. 26

    Python - 遍历熊猫数据帧中每一行的函数

  27. 27

    在 Pandas 数据帧上使用转换函数,为数据帧的每一行返回新值

  28. 28

    在 Pandas 数据帧的每一行上应用函数

  29. 29

    在数据帧的每一行上应用 SentimentIntensityAnalyzer 函数并提供情绪分数

热门标签

归档