我有一个生成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
操纵。
我的代码出了什么问题?
答案 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))