index:length(......):长度为0的参数

时间:2020-10-25 07:16:36

标签: r

我正在尝试使用以下定义的函数来计算变量。

我发现是 Function(0:n) Function(0:last(age_mortality))导致了错误。 但是,我的目的是让向量从0到n开始

谁知道我该如何解决?

1 个答案:

答案 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

如果这不是您要发表评论的内容,我们将予以解决。

  • 现在我们收到2条具有相同解决方案的警告:

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]] )) BenefitAnnuityDue函数的输出,我们可以看到是什么原因造成的,显然是一些nExNA 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