我想使用多个基准计算生长度日,使用最低每日温度和最高每日温度。 如果可能的话,我想在没有 for 循环的情况下执行此操作,以最小化我的代码。
bases <- c(40,45,50)
tmin <- runif(10,30,70)
tmax <- runif(10,55,95)
我想找到我有假温度数据的十天中每个基地的生长度天数。 3 个碱基中的每一个应该有 10 个输出值。
我尝试过mapply,如下所示:
gdd_func <- function(tmin,tmax,bases){
(tmin + tmax)/2 - bases}
test <- mapply(gdd_func,tmin,tmax,bases)
这会产生不正确的输出,老实说我不知道它在做什么。我希望输出等于使用不同的基数运行上述函数 3 次。 每个输出都有 10 个与不同碱基相对应的 gdd 值。 我将如何使用某种应用函数来做到这一点? 或者我还需要更多东西吗?
我认为你应该将
tmin
和 tmax
封装在 list
中,例如,
> mapply(gdd_func, list(tmin), list(tmax), bases)
[,1] [,2] [,3]
[1,] 19.119648 14.119648 9.119648
[2,] 6.119249 1.119249 -3.880751
[3,] 19.523350 14.523350 9.523350
[4,] 13.023240 8.023240 3.023240
[5,] 31.083015 26.083015 21.083015
[6,] 32.281061 27.281061 22.281061
[7,] 18.062584 13.062584 8.062584
[8,] 18.047198 13.047198 8.047198
[9,] 21.518514 16.518514 11.518514
[10,] 28.440563 23.440563 18.440563
只是为了好玩,即使这个问题已经得到了很好的答案,循环/*应用免费替代方案,利用回收:
gdd_func(tmin, tmax, rep(bases, each=length(tmin))) |>
matrix(ncol = length(bases))
上面的输出与@ThomasIsCoding的答案相同。