为什么for循环未使用函数中指定的'i'

时间:2018-10-15 02:37:09

标签: r

我有一个数据框,其中每只动物观察25周,总共观察20只动物。我正在尝试编写一个函数,该函数每次计算2点之间的线性方程,并针对25周和20只动物进行计算。

我想使用方程式的一般形式,以便可以在任何点上计算值。在该函数中,Week = t,Weight = d。

我不知道该如何做。我认为循环无法使用数据帧的每一行作为函数的索引。我的数据框名为growth,如下所示:

Week   Weight Animal
1        50      1
2        60      1
n=25
1        80      2
2        90      2
                 .
                 .
                 20

for (i in growth$Week){
    eq<- function(t){
      d = growth$BW.Kg
      t = growth$Week
      (d[i+1]-d[i])/(t[i+1]-t[i])*(t-t[i])+d[i]
      return(eq)
    }
}

eq(3)

1 个答案:

答案 0 :(得分:0)

好的,所以我认为这里有些混乱。首先是在for循环中编写一个函数。发生的情况是您要一遍又一遍地重写函数,并且函数也不会在任何地方保存方程式的值。其次,您将t作为参数传递,但是期望t跟随带i值的for循环。最后,您说希望对每只动物都这样做,但是动物值不会显示在代码中。

因此在这里很难看到要实现的目标。

根据您的上述信息,我将您的函数重写为可以为您的方程式提供结果的内容。

library(tidyverse)
growth <- tibble(week = 1:5,
             animal = 1,
             weight = c(50,52,55,54,57))

eq <- function(d,t,i){

  z <- (d[i+1]-d[i])/(t[i+1]-t[i])*(t-t[i])+d[i]
  return(z)
}

test_result <- eq(growth$weight,growth$week,3) 

结果:

[1] 57 56 55 54 53

这是您所期望的结果吗?还是您只希望每只动物每周只得到一个结果?您能否提供一个可以产生一个所需结果(即第1周动物1的结果)的公式的可行示例?