我遇到命令apply的問題,我不明白爲什麼我的解決方案不起作用。R在陣列上應用函數
假設我有一個名爲$ A $的矩陣,其維數爲$ m \ times n $。我想對它的每個元素應用一個函數,所以我使用B < -apply(A,c(1,2),函數)。這工作,我有我的結果在維度$ m \ times n $的另一個矩陣。
不,我想將這些結果安排在$ C $的維數$ m \ times n \ times 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"
「,如果它需要我會發布具體的代碼我使用「,是的請。這就是你如何提出好問題並獲得快速答案 – Ananta
完成,感謝您的輸入 – Arpayon