私は、Rでlapplyする必要があると信じている質問があります(私は他の解決策にも関わらず)。各列にR関数を適用します
私はバイナリ変数の複数の順列を持つデータセット(以下に貼り付けられるコード)を持っています。その結果、各パーミュテーションごとにYが返されます。私は、各Y変数のプレディクタとしてX1-X75変数を使用するモデルを実行しようとしています。これは最終的には代用モデルになります。そのため、最初に必要なのは、パーミュテーションごとに個別のデータセットを得るためにデータをサブセット化することです。たとえば、Y.control.perm1、X1 ... X75、Y.control.perm2、 X1 .... X75。
私が抱えている問題は、適用ステートメントでこれを行う方法です。同じデータセットに関心のある列と予測子の両方を取得することはできません。ここに私が持っているコードがあります。ここでcontはコントロールの列だけを取り、obは関心のある行です。この場合、100個のデータセット(または積み重ねられたデータセット)が必要です.Y.control.perm1 ... 100は各データセットに固有で、X1-X75はすべてに表示されます。
nperm=100 #number of permuations
start=p+2+nperm
cont=seq(start+1,start+nperm*2+2,by=2) #grabbing columns of interest
test=lapply(d[which(d$ob==0),c(cont,1:p)], function(x){
names(x)
txt.imp=as.data.frame(x[c(cont,1:p)])
})
質問がに沸く:リストの各要素は、データセットの別の列であることで、データセット内の列のサブセットに関数を適用するためにどのようにlapply使用(または同様の機能)することができます?
この
は、データ生成コードです:これは、100個のデータセットを作成しますp=75
N=10
seed=342
# FUNCTION TO GENERATE ONE SIM #
dataGen = function(N, p, seed){
set.seed(2398)
X=rbinom(N*p,1,.5)
df=data.frame(matrix(X,nrow=N,ncol=p))
df$obs.txt=rep(0:1,N/2)
x.for.perm=df$obs.txt
perm=NULL
for(i in 1:100){
perm.i=permute(x.for.perm)
perm=as.matrix(cbind(perm,perm.i))
}
df$TE=-1.3*df$X1-1.2*df$X2-.6*df$X3+.3*df$X4+.5*df$X5+1.1*df$X6+1.2*df$X7
df=as.data.frame(cbind(df,perm))
names(df)
seed=set.seed(seed)
length(df)
col.vec=c(76,78:177)
col.vec
df.out<-lapply(df[,col.vec],function(x){
y.obs.control=rnorm(N,0,1) #observed y value under control
df$y.obs.tx=ifelse(x==1,(y.obs.control+df$TE),NA) #observed y value under TX
#df$Y=ifelse(df$obs.txt==0,df$y.obs.control,df$y.obs.tx) #observed Y value
df$y.obs.control=ifelse(x==0,y.obs.control,NA) #observed y value under control
cbind(df$y.obs.control,df$y.obs.tx)
})
df2=do.call(cbind,df.out)
names=c("y.obs.control","y.obs.tx")
for(i in 1:100){
names.i=c(paste("y.obs.control.p.",i,sep=""),paste("y.obs.tx.p.",i,sep=""))
names=c(names,names.i)
}
colnames(df2)<-(names)
df2=as.data.frame(df2)
df2$ob=rep(0:1,each=N/2)
df2$sim=rep(length(seed),each=N)
df2=as.data.frame(cbind(df,df2))
return(df2)
}
d=dataGen(10,75,43)
'permute'関数のパッケージはどれですか?私はそれが 'gtools'パッケージだと思いますか? – nograpes
返された 'dataGen'関数のdfの構造は何ですか?あなたがサブセット化する必要があるobs.controlとobs.txの列の幅が非常に広いですか? X1-X75はもともと存在しますか?最初のコード・ブロックで 'p'とは何ですか? 'd $ ob'は変化するか、常にゼロに等しいか?基本的には、少数のデータ行の例を投稿してください。 – Parfait