2017-08-25 1 views
0

私は8つの応答と12のプレディクタを持つループを実行しています。結果として得られる結果の行列は、ラベルなしの行が96個あります。自分ですべての組み合わせをリストする必要なく、モデルに接続されたレスポンスとプレディクタに基づいて、Rに自動的にラベルを付けさせる方法はありますか?これは私が使っているコードの例です:ループの行列にrownamesを自動的に追加して、モデルのプレディクタとレスポンス変数にラベルを付けるにはどうすればよいですか?

set.seed(0) 
set.seed(1) 
dat <- gamSim(1,n=100,scale=2) 
dat2 <- gamSim(1,n=100,scale=2) 
names(dat2)[1:5]<-c("y1", paste0("x", 4:7)) 
d<-cbind(dat[, 1:5], dat2[, 1:5]) 
resp <- d[ c("y", "y1")] 
pred <- d[, !(colnames(d) %in% c("y", "y1"))] 

results<- vector("list", length=ncol(resp)*ncol(pred)) 
dim(results) <- c(ncol(resp), ncol(pred)) 

for(i in 1:ncol(resp)){ 
    for(j in 1:ncol(pred)){ 
    results[i, j][[1]] <- gamm(resp[, i] ~ s(pred[, j])) 
    } 
} 
resultsl <- do.call("list", results) 
pspline<-sapply(resultsl, function(l) summary(l$lme)$tTable[,5]) 
pspline2<-plyr::ldply(pspline, rbind) 
pspline2 

1 6.949984e-39 
2 7.174833e-01 
3 1.665304e-40 
4 4.928242e-01 
.... 

私は、自動的に「Y0-XO」、「Y1-XO」、「YO-X1」と表示される行をしたいと思い、「Y1 -x1 "...など、あるいは行がどの応答と予測子を参照しているかを明確にすることができます。私は、ループを実行する前に結果のマトリックスに淡色の名前とrownamesの異なる反復を試みたが、それを動作させることはできません。何か案は?

+1

行列 'df'を提供できますか? – useR

+0

元の質問に追加します。 – user8517310

答えて

0

あなたは行列の列に名前を付けるためにそれらを使用&検索結果の各式の名前を格納することができます:

for(i in 1:ncol(resp)){ 
    for(j in 1:ncol(pred)){ 
    results[i, j][[1]] <- mgcv::gamm(resp[, i] ~ s(pred[, j])) 
    attr(results[i, j][[1]], "formula") <- paste(colnames(resp)[i], 
               colnames(pred)[j], sep = "-")          colnames(pred)[j], sep = "-")) 
    } 
} 
resultsl <- do.call("list", results) 
pspline<-sapply(resultsl, function(l) summary(l$lme)$tTable[,5]) 
colnames(pspline) <- sapply(resultsl, function(l) attr(l, "formula")) 

> pspline 
         y-x0  y1-x0   y-x1  y1-x1   y-x2  y1-x2 
X(Intercept)  1.889636e-40 1.072054e-35 4.272656e-47 1.179033e-35 5.963889e-53 1.004778e-35 
Xs(pred[, j])Fx1 6.794519e-01 6.142264e-01 2.529175e-09 8.959402e-01 1.050719e-01 5.192141e-01 
         y-x3  y1-x3   y-x4  y1-x4   y-x5  y1-x5 
X(Intercept)  2.021544e-40 1.110827e-35 2.030668e-40 1.560173e-36 2.020669e-40 1.709149e-39 
Xs(pred[, j])Fx1 9.175815e-01 6.840799e-01 9.958544e-01 2.489406e-02 9.137317e-01 3.383139e-06 
         y-x6  y1-x6   y-x7  y1-x7 
X(Intercept)  1.223498e-40 5.539263e-48 1.757977e-40 1.158747e-35 
Xs(pred[, j])Fx1 2.731945e-01 1.911815e-02 5.586884e-01 8.059418e-01 

私はあなたのコードでマトリックスをバインドするためにldplyを使用した理由はわかりません。 X(Intercept)とX(pred [、j])を区別するためのラベルを付けずに、同じ列にあるすべてのものになります。単純にデータフレームとして長い形式で使用する場合は、as.data.frame(t(pspline))

> head(as.data.frame(t(pspline))) 
     X(Intercept) Xs(pred[, j])Fx1 
y-x0 1.889636e-40  6.794519e-01 
y1-x0 1.072054e-35  6.142264e-01 
y-x1 4.272656e-47  2.529175e-09 
y1-x1 1.179033e-35  8.959402e-01 
y-x2 5.963889e-53  1.050719e-01 
y1-x2 1.004778e-35  5.192141e-01 
+0

ありがとうございました!それは完璧に働いた! – user8517310

関連する問題