【发布时间】:2014-03-06 04:44:56
【问题描述】:
我有一个生成 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 x 50。我认为它应该返回一个大小为 50 x 10 的矩阵,其中行由SH 操作。
我的代码有什么问题?
【问题讨论】:
-
试试
data2<-apply(data,MARGIN = 2,SH) -
@Alex 您的代码是否将
SH应用于data的列而不是其行? -
是的。对不起,误读了这个例子。我运行了代码,它似乎返回了一个 10 x 50 的矩阵。似乎每一列都是应用于一行数据的 SH 的答案?
-
啊,答案在? )[MARGIN])' 如果 'n > 1'。即 SH 返回一个长度为 10 的向量,
dim(data)[1]为 50。