R 使用外部函数获取用户定义函数返回的值表

R 使用外部函数获取用户定义函数返回的值表,r,outer-join,R,Outer Join,我是R领域的新手,试图理解向量处理方式,而不是循环。我需要有关如何使用外部函数和用户定义函数创建值表的帮助 下面是一个简单的函数,它给出了一个普通债券的价格 bp = function(y, n=1, c=0, fv=100, freq=2){ per = 1:(n*freq) cf = rep(c/freq, n*freq) cf[length(cf)] = cf[length(cf)] + fv df = 1/(1+y/freq)^per cf %*% df } 我想为

我是R领域的新手,试图理解向量处理方式,而不是循环。我需要有关如何使用外部函数和用户定义函数创建值表的帮助

下面是一个简单的函数,它给出了一个普通债券的价格

bp = function(y, n=1, c=0, fv=100, freq=2){
  per = 1:(n*freq)
  cf = rep(c/freq, n*freq)
  cf[length(cf)] = cf[length(cf)] + fv
  df = 1/(1+y/freq)^per
  cf %*% df
}
我想为收益率n和给定值c的向量创建一个债券价格表。比如

ylds = c(0.05, 0.07, 0.08)
n = c(1, 5, 10, 15, 20,30)
price_table = outer(ylds, n, bp, c=9)
我预计有18个价格(3x6)的矩阵/数组,但我得到了这个错误

###### Start of Error Message

Error in rep(c/freq, n * freq) : invalid 'times' argument

In addition: Warning message:

In 1:(n * freq) : numerical expression has 18 elements: only the first used

#### End of Error Message
我做错了什么?我怎样才能得到想要的答案呢

请帮忙

问候


K

outer
希望您的函数被矢量化。正如所写,只有当n是标量时才有意义使用bp。你可以重写你的bp函数,或者你可以利用向量化函数来为你做这件事

bp = function(y, n=1, c=0, fv=100, freq=2){
  per = 1:(n*freq)
  cf = rep(c/freq, n*freq)
  cf[length(cf)] = cf[length(cf)] + fv
  df = 1/(1+y/freq)^per
  cf %*% df
}

# outer needs the function to be vectorized
# So we ask Vectorize to do this for us.
bpvec <- Vectorize(bp)
ylds = c(0.05, 0.07, 0.08)
n = c(1, 5, 10, 15, 20,30)
price_table = outer(ylds, n, bpvec, c=9)
bp=函数(y,n=1,c=0,fv=100,freq=2){
per=1:(n*freq)
cf=代表(c/频率,n*频率)
cf[长度(cf)]=cf[长度(cf)]+fv
df=1/(1+y/频率)^每
cf%*%df
}
#外部需要将函数矢量化
#所以我们要求Vectorize为我们做这件事。

bpvec您需要对
bp
进行矢量化,这样,如果
y
n
是长度相同的向量,那么
bp(y,n,cv,fv,freq)
也会给出长度相同的向量。
outer
仅适用于
矢量化的函数。你的函数不是,这就是它失败的原因。@kishore-这个答案有什么不对吗?如果没有,你会考虑接受吗?