autocrosstable <- function(A,B,TITLE=NULL) { if (length(TITLE)<1) { .TITLE <- paste("クロス集計:",deparse(substitute(A)),"×",deparse(substitute(B))) } else { .TITLE <- TITLE } cat(.TITLE,"\n") missing <- is.na(A)|is.na(B) .A <- as.factor(A[!missing]) .NAME.A <- paste(deparse(substitute(A))) .B <- as.factor(B[!missing]) .NAME.B <- paste(deparse(substitute(B))) .FOK <- (length(table(.A))>=2)&(length(table(.B))>=2) .TAB <- table(.A,.B) names(dimnames(.TAB))<-c(.NAME.A,.NAME.B) .SUMA <- table(.A) .SUMB <- table(.B) .ALL <- sum(.TAB) .PTAB <- rbind(cbind(.TAB,.SUMA),c(.SUMB,.ALL)) rownames(.PTAB) <- c(names(.SUMA),"SUM") colnames(.PTAB) <- c(names(.SUMB),"SUM") print(.PTAB) if (.FOK) { r.fisher <- fisher.test(.TAB) cat("Fisherの正確な確率検定: p=",r.fisher$p.value,"\n\n") } else { cat("カテゴリ数が1以下の変数があるので検定不可\n\n") } mosaicplot(.TAB,main=.TITLE) }