Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 存储从函数到向量的连续值?_R_Function_Loops_Vector - Fatal编程技术网

R 存储从函数到向量的连续值?

R 存储从函数到向量的连续值?,r,function,loops,vector,R,Function,Loops,Vector,我一直在胡乱地学习函数来计算家庭作业的答案,在这种情况下,我遇到了一些问题 代码如下: pv <- function(x,y,z) { list2 <- 0 ans <- 0 for(t in z){ fv <- x d <- y rate <- (1+d)^t ans[t] <- fv/rate } return(ans) } 为了计算现值,我想将函数应用于一个值,范围为z=1:

我一直在胡乱地学习函数来计算家庭作业的答案,在这种情况下,我遇到了一些问题

代码如下:

pv <- function(x,y,z) {
   list2 <- 0
   ans <- 0
   for(t in z){
     fv <- x
     d <- y
     rate <- (1+d)^t
     ans[t] <- fv/rate
   }
   return(ans)
 }
为了计算现值,我想将函数应用于一个值,范围为z=1:10,比如说,并将每年的值存储在一个向量中。我所拥有的一切都是有效的,但这种策略在其他应用程序中会出现故障。例如,当我想输入一个值向量时,我有另一个函数,在其中我通过一个函数运行ans向量达数年之久,我很难找到一个可用的向量

pv = function(fv, d, t)
  fv/(1+d)^t

pv(1.05^2, 0.05, c(1, 2))

这里有一个解释。基本上,在R中,代数函数会自动应用于数字数据,因此循环通常是不必要的。

我不得不对for循环进行更改,然后我使用了mapply:

每一行包含某一期间x的每一个值的现值,即第1行是第一个期间的现值。如果您只需要第5个句号来表示所有相关值:


mapplypv、c1000、1200、1500、5600、c.05、c.02、c.03、c.09、c.05、c.03、c.05、c.02、c.03、c.05、c.05、c.03、c.05、c.05、c.05、c.05、c.02、c.03、c.03、c.05、c.05[?您可以使用sapply来使用带有值向量的函数:sapplyvectorOfValues,pv好的,这很有意义。当我使用sapply并将值存储到向量时,它们会按顺序排列吗?我一直对sapply的用法感到困惑。是的,他们会的。sapply用于将向量的每个元素插入函数并返回结果。“s”代表简化应用。然而,sapply在这里是不正确的,因为您的函数有3个参数。您需要使用的是mapply,它适用于具有多个参数的函数。Try,mapplypv,c1000,1200,1500,5600,c.05,.02,.03,.09,5矩阵的最下面一行似乎是当前值计算不确定这是什么原因。将z中的fort更改为1:z中的fort,mapply工作正常。您将看到每个周期的迭代。@small_data88我现在明白了,谢谢!我可以把从pv函数得到的向量输入到通货膨胀函数中,很好。向量化在那里什么都不做。最初的函数pv已经矢量化了。虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
 pv <- function(x,y,z) {
       list2 <- 0
       ans <- 0
       for(t in 1:z){ # changed from t in z
         fv <- x
         d <- y
         rate <- (1+d)^t
         ans[t] <- fv/rate
       }

   return(ans)
 }
        [,1]     [,2]     [,3]     [,4]
[1,] 952.3810 1176.471 1456.311 5137.615
[2,] 907.0295 1153.403 1413.894 4713.408
[3,] 863.8376 1130.787 1372.712 4324.227
[4,] 822.7025 1108.615 1332.731 3967.181
[5,] 783.5262 1086.877 1293.913 3639.616