首页 > 解决方案 > splineDesign(Aknots,x,ord)中的错误:“列表”对象不能被强制输入“双”

问题描述

在下面的循环中,我在创建 bvar 对象时出错:

bvar <- do.call(onebasis,c(list(x=tmaxproj[,j+1]),argvar)) 其中 tmaxproj 有一个日期列和 6 个不同的全球气候模型最高温度值。运行循环时出现以下错误:

splineDesign(Aknots,x,ord)中的错误:“列表”对象不能被强制输入“双”

所以我尝试将 tmaxproj 变量转换为也不起作用的字符:

FUN(X[[i]], ...) 中的错误:仅在具有所有类似数字的变量的数据帧上定义

tmaxproj 看起来像:

任何帮助都感激不尽。请让我知道是否需要任何进一步的数据来重现这部分代码。在此处输入图像描述

tmaxproj

小标题:51,134 x 7

date tmax_canesm tmax_miroc tmax_gfdl tmax_cnrm tmax_cmblr tmax_cgcm3 1 1961-01-01 28.1 27.7 27.3 27.8 28.3 28.3 2 1961-01-02 27.9 27.7 28.0 27.6 28.2 28.5 3 1961-01-03 27.9 27.9 27.9 27.0 27.7 28.5 4 1961-01-04 28.7 28.2 28.4 27.2 28.2 28.8 5 1961-01-05 28.6 28.5 28.2 28.1 28.9 29.2 6 1961-01-06 28.8 28.2 27.5 27.7 28.9 28.1 7 1961-01-07 28.5 28.1 27.2 27.4 27.7 28.4 8 1961-01-08 28.4 28.0 27.9 27.7 27.4 28.5 9 1961-01-09 28.8 28.1 28.2 28.1 27.6 28.4 10 1961-01-10 28.4 28。1 28.0 27.5 28.0 28.2

...还有 51,124 行

RCODE for (i in seq(rcp)) {

打印

cat("\n\n",names(rcp)[i],"\n")

为特定 RCP 情景选择预计温度系列

tmaxproj <- get(rcp[[i]])

每个 GCM 运行循环

for(j in seq(gcm)) {

# PRINT
cat(gcm[j],"")

# (4) EXTRAPOLATION OF THE CURVE: 
# - DERIVE THE CENTERED BASIS USING THE PROJECTED TEMPERATURE SERIES
#   AND EXTRACT PARAMETERS
bvar <- do.call(onebasis,c(list(x=tmaxproj[,j+1]),argvar))
cenvec <- do.call(onebasis,c(list(x=cen),argvar))
bvarcen <- scale(bvar,center=cenvec,scale=F)

# INDICATOR FOR COLD/HEAT DAYS
indheat <- tmaxproj[,j+1]>cen

# (5) IMPACT PROJECTIONS:
# - COMPUTE THE DAILY CONTRIBUTIONS OF ATTRIBUTABLE DEATHS
an <- (1-exp(-bvarcen%*%coef))*oiproj

# - SUM AN (ABS) BY TEMPERATURE RANGE AND PERIOD, STORE IN ARRAY BEFORE THE ITERATIONS
# NB: ACCOUNT FOR NO TEMPERATURE BELOW/ABOVE CEN FOR GIVEN PERIODS
ansim[,"tot","abs",j,i,1] <- tapply(an,seqperiod,sum)
ansim[,"cold","abs",j,i,1] <- tapply(an[!indheat],factor(seqperiod[!indheat]),sum)
ansim[,"heat","abs",j,i,1] <- tapply(an[indheat],factor(seqperiod[indheat]),sum)

# (6) ESTIMATE UNCERTAINTY OF THE PROJECTED AN:
# - SAMPLE COEF ASSUMING A MULTIVARIATE NORMAL DISTRIBUTION
set.seed(13041975+j)
coefsim <- mvrnorm(nsim,coef,vcov)

# - LOOP ACROSS ITERATIONS
for(s in seq(nsim)) {
  
  # COMPUTE THE DAILY CONTRIBUTIONS OF ATTRIBUTABLE DEATHS
  an <- (1-exp(-bvarcen%*%coefsim[s,]))*oiproj
  
  # STORE THE ATTRIBUTABLE MORTALITY
  ansim[,"tot","abs",j,i,s+1] <- tapply(an,seqperiod,sum)
  ansim[,"cold","abs",j,i,s+1] <- tapply(an[!indheat],factor(seqperiod[!indheat]),sum)
  ansim[,"heat","abs",j,i,s+1] <- tapply(an[indheat],factor(seqperiod[indheat]),sum)
  
}

} }

标签: rdatabase

解决方案


推荐阅读