如何在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) ]))
控制台上的输出如下所示:
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 级和 BGANr BGA196_01 的 PeakTemp