我正在尝试使用以下定义的函数来计算变量。
我发现是 Function(0:n)和 Function(0:last(age_mortality))导致了错误。 但是,我的目的是让向量从0到n开始
谁知道我该如何解决?
答案 0 :(得分:1)
解决后,我会弹出一些错误和警告。
age_mortality==age
=> age_mortality %in% age
:您要尝试获取在age_mortality
中找到的age
元素的索引,这可以是由第二个代码实现,因为第一个将检查age_mortality
的元素1是否等于age
的元素1,这将引发警告,因为age
的长度与{{1 }}。通过查找替换全部应用更改。这样可以使函数至少输出结果。age_mortality
导致以下警告:在index:length(age_mortality)中:数值表达式包含81个元素:仅使用第一个。
您要计算的是剩余的年数,因此我建议您使用N = length(age_mortality[index:length(age_mortality)])
进行更改。
您还需要更改后面的行
N = length(age_mortality) - index +1
如果这不是您要发表评论的内容,我们将予以解决。
1:在AnnuityDue(年龄+ t)-nEx(t)* AnnuityDue(年龄+ n): 较长的物体长度不是较短的物体长度的倍数
2:In S *收益(0:last(age_mortality))*(1 + f)+保费*(e *: 较长的物体长度不是较短的物体长度的倍数
如果我们打印ax <- sapply(1:length(index), function(i) sum( (v^(1:(N[i]-1))) * L[(index[i]+1):(length(L))] / L[index[i]] ))
,Benefit
和AnnuityDue
函数的输出,我们可以看到是什么原因造成的,显然是一些nEx
,NA
s和NAN
是导致向量长度不同的原因。我们可以通过定义一个Inf
函数来解决此问题,该函数将向量作为输入,仅返回有限且已定义的元素,即:
omit
然后将每个先前函数的输出重定向到其中,然后返回值:
omit <- function(x) x[is.finite(x)]
现在代码可以正常工作了,没有任何警告,不确定输出是否正确:
Benefit <- function(t){
### your code here
return(omit(B))
}
# same thing for the other functions stated above