R在数组上应用函数

时间:2016-02-03 16:32:20

标签: arrays r apply

我遇到了命令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"

1 个答案:

答案 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)