R 使用外部函数获取用户定义函数返回的值表
我是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 } 我想为
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-这个答案有什么不对吗?如果没有,你会考虑接受吗?