我有一个数据框,其中每只动物观察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)
答案 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的结果)的公式的可行示例?