by()
呼び出しで実際に使用された要素の組み合わせにアクセスするにはどうすればよいですか? dbscan (fpc-package) の結果をプロットし、対応する因子の組み合わせをプロット タイトルに追加したいと考えています。出力のクラスは「by」です。attributes(res.lst)
それぞれを使用するattr(res.lst,"dimnames")
と、グローバル リストのみが表示されます。それを個々に使用されているデータのサブセットにマッピングすることはできません。では、by
関数はどの組み合わせがどのサブセットに実際に使用されているかをどのように「知る」のでしょうか。この情報はどこに保存されますか?
目的の出力がどのように見えるかを明確にするために、簡単な例 (dbscan をスキップ) を作成しようとしました。何か助けはありますか?可能であればベースRにこだわりたいです。
dat <- data.frame(x=rnorm(1000), y=rnorm(1000), fac1=rep(c("L1", "L2"), 500), fac2= as.factor(c(rep(1, 5), rep(2, 5) )) ) # dummy data
# dummy plot function
fun.plot <- function(data, factorcomb=NA) {
if (is.na(factorcomb)==T) {
ttl <- "Standard"
} else {
ttl <- paste("factor combination: ", paste(factorcomb, collapse="+"))
}
dev.new()
plot(data$x, data$y, main=ttl)
}
res.lst <- by(data=dat, INDICES=dat[ ,colnames(dat[ , c(3,4)]) ], function(splt) fun.plot(splt) )
# desired result
for (f1 in levels(dat$fac1) ) {
for (f2 in levels(dat$fac2) ) {
fun.plot(dat[ which( dat$fac1==f1 & dat$fac2==f2), 1:2 ], factorcomb=c(f1,f2) )
}
}
編集:これは私の元の関数からの呼び出しです。
# by(data=adat, INDICES=adat[ ,colnames(adat[ ,c(36,41) ]) ], FUN=fun.dbscan, factornames=colnames(adat[ ,c(36,41) ]))
そして、coonsole の出力は次のようになります。
PeakTemp: 250 # Factor 1 (column number 36) + Level
BGANr: BGA196_01 #Factor 2 (column number 41) + Level
dbscan Pts=1551 MinPts=12 eps=0.015
0 1
seed 0 17
border 1534 0
total 1534 17
etc...
実際に使用された因子の組み合わせを fun.dbscan 関数に渡したいです。その場合、レベル 250 の PeakTemp と BGANr BGA196_01 になります。