R语言中如何根据数组Tw的正负对数组Ta应用不同计算函数
问题原因
你使用的if是R的标量条件判断语句,当传入数组Tw>=0的布尔数组时,R只会读取数组第一个元素的判断结果决定走哪个分支,因此会全局应用同一个计算函数,无法实现逐元素对应判断的需求。
正确实现方案
方案1:逻辑索引赋值(推荐,大数组运算效率更高)
直接通过布尔索引定位不同分支的元素位置,分别赋值计算,适合你这种2160×1080×12的高维数组,运算速度快内存占用低:
# 预分配和Tw同维度的结果数组 es <- array(dim = dim(Tw)) # 计算Tw>=0对应位置的结果 pos_mask <- Tw >= 0 es[pos_mask] <- 6.107 * exp(17.38 * Ta[pos_mask]/(239. + Ta[pos_mask])) # 计算Tw<=0对应位置的结果 neg_mask <- Tw <= 0 es[neg_mask] <- 6.107 * exp(22.44 * Ta[neg_mask]/(272.4 + Ta[neg_mask]))
方案2:向量化函数封装
用ifelse(R的向量化条件判断函数)封装逻辑,代码更简洁:
t.es <- function(Tw, Ta) { ifelse( Tw >= 0, 6.107 * exp(17.38 * Ta/(239. + Ta)), 6.107 * exp(22.44 * Ta/(272.4 + Ta)) ) } es <- t.es(Tw, Ta)
内容的提问来源于stack exchange,提问作者matlabcat
相关产品推荐
相关产品推荐

