2014-01-20 2 views
0

2 개 (또는 그 이상)의 범주 변수와 하나의 관찰을 가진 데이터 프레임이 있습니다.
관측 수가 특정 임계 값보다 높은 범주 변수 조합에 대한 상자 그림을 생성하려고합니다. 아이디어는 일련의 박스 플롯으로 플롯 파일을 가지는데, 각 플롯은 관련 하위 집합을 정의하는 범주 변수의 조합에 따라 명명됩니다.tapply 내의 범주 변수에 대한 액세스

제 아이디어는 tapply을 자체 정의 된 기능으로 사용하는 것입니다. 이것은 원칙적으로 작동합니다 (아래 참조). 내 유일한 문제는 함수 내에서 플롯의 제목과 관련된 범주 변수의 관련 조합에 액세스 할 수 있는지 여부를 알 수 없다는 것입니다. ** 어떻게 그들에게 접근 할 수 있습니까?

전류 용액 :

cat1 <- c("A","A","A","A","E") 
cat2 <- c("a","c","c","c","e") 
obs <- c(2.0,2.2,2.5,5.0,1.0) 

my_plot <- function(obs_subset,??_cat1-val,cat2-val_??) { 
    if(length(obs_subset) > 2) boxplot(obs_subset, 
    main=paste(cat1-val,cat2-val,sep = " ")) ;# how to compute the title 
} 
indices <- list(cat1,cat2) 

pdf(file="theFileName.pdf") 
tapply(obs,indices,my_plot) 
dev.off() 

이는 범주 적 변수 값없이 작동한다.
각각의 호출에서 cat1 및 cat2의 실제 값에 액세스하여 그 값을 사용하여 그래프에 레이블을 지정할 수 있습니까?

+0

원하는 출력을 더 잘 묘사해야한다고 생각합니다. 한 변수의 하위 집합에서 여러 상자 그림을 어떻게 계획합니까? – Thomas

+0

감사합니다. Sven H.의 솔루션은 매력처럼 작동했습니다. – joheid

답변

0

당신은 obs 함께 숫자 인덱스를 생성하고 tapply 내에서 사용할 수 있습니다 : 이제

my_plot <- function(obs_idx) { 
    if(length(obs[obs_idx]) > 2) 
    boxplot(obs[obs_idx], 
      main = paste(cat1[obs_idx[1]], 
         cat2[obs_idx[1]])) 
} 

, 당신을 : 인덱스는 obs, cat1에서 값을 추출하는 데 사용됩니다

idx <- seq_along(obs) 

cat2 tapply을 사용할 수 있습니다. tapply에 의해 반환 된 값에 관심이 없다면 invisible을 사용하는 것이 좋습니다.

pdf(file = "theFileName.pdf", onefile = TRUE) 
invisible(tapply(idx, indices, my_plot)) 
dev.off() 
관련 문제