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

How to apply pv.uneven (FinCal library) (or any function with vectors as input) to every row of a data frame?

我正在尝试对数据框的每一行执行一个现值,这应该不会太难,但在每一行中它必须使用特定范围的列。我有这个:

int<-sample(0:3,1000,rep=TRUE)/100
period<-sample(1:9,1000,rep=TRUE)
a<-data.frame(replicate(10,sample(0:10,1000,rep=TRUE)),int,period)

假设第 1:10 列是付款,然后是 PV 的利率,最后一列(句点)表示从哪一列开始该特定行的 PV。我正在使用 for 来完成此操作,但我想知道是否有更简单的方法,因为我是在超过 100 万行的数据帧上执行此操作的:

a$vpn<-0
for (i in 1:nrow(a))
{
a$vpn[i]<-pv.uneven(a$int[i],a[i,a$period[i]:10])

}

如有任何帮助,我们将不胜感激。

谢谢

我们不知道 pv.uneven 是什么,但假设我们有

pv<-function(interest,cfs) sum(cfs*(1+interest)^-seq_along(cfs))

因此对于数据框 a 的给定行 i,您需要 pv(a$int[i],a[i,a$period[i]:10]).

一个有用的技巧是创建一个辅助函数

pv.aux<-function(int,period,end=10,...) pv(int,c(...)[period:end])

这样你就可以 do.call 一个 mapply

a$vpn<-do.call(mapply,c(pv.aux,a))

对我来说,这比您当前的循环解决方案快很多倍。