gpt4 book ai didi

r - 更新 R 类方法中槽的值

转载 作者:行者123 更新时间:2023-12-04 02:52:57 25 4
gpt4 key购买 nike

我正在使用 S4 oop 在 R 中运行土壤水平衡模型,并且已经创建了类 waterBalance 的对象,我无法从方法中更新槽。这里必须有一些我没有看到的简单东西。我的更新代码是:

setGeneric(name="updateASW",def=function(object,...){standardGeneric("updateASW")})

setMethod(f = "updateASW",
signature(object = "WaterBalance"),
function(object, radiationI, rainfallI, maxTI, minTI, laiTI, laiWI, monthI, yearI) {
object@maxT<-maxTI
object@minT<-minTI
object@laiT<-laiTI
object@laiW<-laiWI
object@month<-monthI
object@year<-yearI
object@radiation<-radiationI
object@precipitation<-rainfallI
object@availableSoilWater<-object@availableSoilWater+rainfallI-getInterception(object)-penmanMonteith(object)
if (object@availableSoilWater>object@ASWMax) {
object@availableSoilWater<-object@ASWMax
}
if (object@availableSoilWater<object@ASWMin) {
object@availableSoilWater<-object@ASWMin
}
})

我已经测试了这个类的所有其他方法,它们给出了正确的值,没有错误。此方法是唯一尝试更新插槽值的方法。

当我创建 waterBalance 类的对象并尝试运行此更新代码时,我得到:

> testWB<-makeWB(100,200,50,"loam",0.02,0.02,58,300,25,-2,15)
> testWB
ASW = 100
ASW Max = 200
ASW Min = 50
LAI of trees = 3
LAI of weeds = 0
Soil type = loam
Radiation =
Rainfall =
Max T =
Min T =
Latitude = 58
Altitude = 300
Gs Max for trees = 0.02
Gs Max for weeds = 0.02
Maximum temp for Ps = 25
Minimum temp for Ps = -2
OPtimum temp for Ps = 15
> updateASW(testWB, 25, 0, 25, 10, 6, 0, 7, 2004)
> testWB
ASW = 100
ASW Max = 200
ASW Min = 50
LAI of trees = 3
LAI of weeds = 0
Soil type = loam
Radiation =
Rainfall =
Max T =
Min T =
Latitude = 58
Altitude = 300
Gs Max for trees = 0.02
Gs Max for weeds = 0.02
Maximum temp for Ps = 25
Minimum temp for Ps = -2
OPtimum temp for Ps = 15
>

因此对象实例中的槽值没有改变。你能告诉我哪里出错了吗?

谢谢,
欧安

最佳答案

您忘记返回 object 的修改值。将 return(object) 或只是 object 作为函数的最后一行。此外,您需要做的不是 updateASW(object, ...)

object <- updateASW(object, ...)

即,您必须将更新后的对象分配给某物。与其他一些语言不同,R 不会就地修改对象(无需大量繁重的工作)。

关于r - 更新 R 类方法中槽的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com