我遇到了命令apply的问题,我不明白为什么我的解决方案不起作用。
假设我有一个名为$ A $的矩阵,其尺寸为$ m \次n $。我想将一个函数应用于它的每个元素,所以我使用B< -apply(A,c(1,2),函数)。这是有效的,我的结果是另一个维度为$ m \ times n $的矩阵。
不,我想将这些结果安排在数组$ C $的维度$ m \次n \次k $。
如果我写了类似C [,, 1]< -apply(A,c(1,2),函数)或甚至C [,, 1]< -B的东西它不起作用我结束dim(C)= NULL。
我真的不知道这里发生了什么,如果需要我会发布我正在使用的具体代码,不过我觉得问题可能与申请有关。
编辑:代码
LTV<-pxt_CBD_male
LTV[,,]<-0
LTV=LTV[,,1:6]
dimnames(LTV)[[3]]<-c("0.00","-0.02","-0.04","-0.06","-0.08","-0.10")
> dim(LTV)
[1] 36 50 6
> class(LTV)
[1] "array"
p=0.05
etalim=qnorm(1-p,mean=ext_mean_male[,],sd=ext_sd_male[,])
> dim(etalim)
[1] 36 50
> class(etalim)
[1] "matrix"
r<-0.015
c<--(0.00)
l1<-0.025
l2<-0.005
nstep<-100
H<-c()
H[1]=100
z<-c(seq(0,nstep))
y<-z[z!=nstep]
for(t in 1:nstep){
H[t+1]=H[t]*(1+c)
}
LTVfunction<-function(x){
y1=H[trunc(x)]
y2=H[trunc(x)+1]
x1=trunc(x)
x2=trunc(x)+1
y=((x-x1)/(x2-x1))*(y2-y1)+y1
value=y/(1+r+l1)^x
return(value)
}
现在问题出现了。第一部作品,第二部作品不是:
LTV1<-apply(etalim,c(1,2),LTVfunction)
> dim(LTV1)
[1] 36 50
> class(LTV1)
[1] "matrix"
LTV[,,1]<-apply(etalim,c(1,2),LTVfunction)
> dim(LTV)
NULL
> class(LTV)
[1] "list"
答案 0 :(得分:0)
我会预先分配数组,然后分配给它:
tmp <- matrix(rnorm(100), 10, 10)
out <- array(0, dim = c(dim(tmp), 3))
out[,,1] <- apply(tmp, c(1, 2), function(x) x + 1)
out[,,2] <- apply(tmp, c(1, 2), function(x) x - 1)