申请的奇怪行为 - 请纠正我

时间:2014-03-06 04:44:57

标签: r matrix apply

我有一个生成0和0矩阵的函数。 1像这样:

sim<-function(b,n){
t<-sort(rnorm(n))
p<-sapply(1:length(b),function(i) 1/(1+exp(b[i]-t)))
y<-runif(length(b)*n)
return(ifelse(p>y,1,0))
}

其中b是向量。定义了另一个乐趣来操纵向量,如下所示:

SH<-function(x){
it<-sort(sample(1:length(x),ceiling(0.25*length(x))))
x0<-x
x0[it]<-1
return(x0)}

例如,在c(1,1,1,0,0,1,1,0,1,0)之类的向量上,SH可能会返回如下内容:

1 1 1 0 1 1 1 1 1 0

现在,使用b这样的向量:

b<-seq(-3,3,len=10)

n=50 sim的结果是50 x 10矩阵。我尝试将SH应用于sim生成的矩阵行:

data<-sim(b,50)
data2<-apply(data,1,SH)

但是apply返回的矩阵大小为10乘50.我认为它应该返回一个大小为50×10的矩阵,其中的行由SH操纵。

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

data2是一个10乘50的矩阵。矩阵的第i列是将SH应用于第i行的结果,从应用的帮助文件中获取:

  If each call to ‘FUN’ returns a vector of length ‘n’, then ‘apply’
 returns an array of dimension ‘c(n, dim(X)[MARGIN])’ if ‘n > 1’.

要返回大小为50的矩阵10,这样每行对应于将SH应用于data中的相应行,转置:

data2 = t(apply(data,1,SH))