Извлечение необъектных значений из ecocrop в R
Я работаю над моделированием культур и климата, используя пакет "dismo" Роберта Хейманса и, в частности, функцию "ecocrop". Ecocrop вызывает серию "скрытых" функций, включая.doEcocrop (ecocrop и.doEcocrop, вставленные ниже), которые вычисляют конечный результат ecocrop.
.doEcocrop <‐ function(crop, tmin, tavg, prec, rainfed) {
if (rainfed)
{
nasum <‐ sum(is.na(c(tmin, tavg, prec)))
} else {
nasum <‐ sum(is.na(c(tmin, tavg)))
}
if (nasum > 0) { return( new('ECOCROP')) }
duration <‐ round((crop@GMIN + crop@GMAX) / 60)
tmp <‐ c(crop@TMIN, crop@TOPMN, crop@TOPMX, crop@TMAX)
temp <‐ .getY(tmp, tavg)
ktmp <‐ c(crop@KTMP, crop@KTMP, Inf, Inf)
tmin <‐ .getY(ktmp, tmin‐5)
if (rainfed) {
pre <‐ c(crop@RMIN, crop@ROPMN, crop@ROPMX, crop@RMAX)
shftprec <‐ c(prec[12], prec[‐12])
cumprec <‐ movingFun(prec, n=duration+1, fun=sum, type='from', circular=TRUE) + shftprec
prec <‐ .getY(pre, cumprec)
allv <‐ cbind(temp, tmin, prec)
} else {
allv <‐ cbind(temp, tmin)
}
minv <‐ apply(allv, 1, min)
obj <‐ new('ECOCROP')
obj@crop <‐ crop
obj@suitability <‐ movingFun(minv, n=duration, fun=min, type='from', circular=TRUE)
obj@maxsuit <‐ max(obj@suitability)
if (obj@maxsuit > 0) {
obj@maxper <‐ which(obj@suitability==max(obj@suitability))
} else {
obj@maxper <‐ 0
}
return(obj)
}
ecocrop <‐ function(crop, tmin, tavg, prec, rainfed=TRUE, ...) {
if (class(crop) == 'character') {
crop <‐ getCrop(crop)
}
if (missing(prec) & rainfed) {
stop('prec missing while rainfed=TRUE' )
}
if (inherits(tmin, 'Raster')) {
if (nlayers(tmin) != 12) {
stop()
}
.ecoSpat(crop, tmin, tavg, prec, rainfed)
} else {
.doEcocrop(crop=crop, tmin=tmin, tavg=tavg, prec=prec, rainfed=rainfed, ...)
}
}
Мне было просто интересно, существует ли простой метод для извлечения, например, 'allv' и 'minv' из функции, или мне нужно переопределить их как объекты и переписать функцию? Я пробовал это неоднократно, определяя как allv, так и minv как объекты, но столкнулся с ошибкой, которую, я думаю, я проследил до проблем среды и / или пространства имен.
Я уверен, что должен быть более простой способ сделать это, если у кого-то есть какие-либо идеи, или Роберт, если вы находитесь там и могли бы пролить свет на то, куда идти, я бы очень признателен.
Большое спасибо и извинения, если я не был достаточно конкретным.