2012-10-18 2 views
4

이름이 지정된 문자 벡터를 사용하여 맞춤 색상 표를 보유하려고합니다. 예 : "# dc322f"를 반복하지 말고 팔레트 [ 'red']를 사용하십시오.R 음모의 이름이있는 문자 벡터 및 par()

그러나이 벡터의 요소를 par()에 대한 인수로 사용할 수있는 것처럼 보이지 않습니다 (다른 곳에서도 사용할 수 있지만).

다음은 예입니다. 녹색 점으로 된 그래프를 만들지 만 par() 호출은 실패하고 배경은 흰색입니다. 참고 그 plot() 호출 내에서 팔레트 벡터를 사용하여 I 설정 매개 변수 :

> palette <- c('#002b36','#dc322f','#859900') 
> names(palette) <- c('black','red','green') 
> par(bg=palette['red'])                                 
Warning message: 
In par(bg = palette["red"]) : "bg.red" is not a graphical parameter 
> plot(1:10,1:10,col=palette['green']) 
> # (White graph with green dots appears) 

나는이 숫자 벡터, 그러나, 작동 명명 된 사용

> palette <- 1:3                                   
> names(palette) <- c('black','red','green')                            
> par(bg=palette['red'])                                
> # (no error here -- it worked.) 
> plot(1:10,1:10,col=palette['green']) 
> # (Red graph with green dots appears) 

나는 상당히입니다 R을 처음 접했을 때 나는 근본적인 것이 빠져있는 것처럼 보였습니다. 여기 무슨 일이 일어나고 있는지 아십니까?

답변

4

사용 unname, par에 전달 된 항목의 색상을 정의 바로 문자 벡터가 아닌 이름 첨부 요소 이유에

palette <- c('#002b36','#dc322f','#859900') 
names(palette) <- c('black','red','green') 
par(bg=unname(palette['red'])) 
plot(1:10,1:10,col=palette['green']) 

enter image description here

이되도록? 인수 명명 된 문자 벡터의 경우 모든 인수가 문자 벡터 as.list(unlist(args)) 작품은 다음

if (all(unlist(lapply(args, is.character)))) 
      args <- as.list(unlist(args)) 

방법 경우 par

args <- list(bg = palette['red']) 
as.list(unlist(args)) 
$bg.red 
[1] "#dc322f" 

bg.red가 유효한 par가 없습니다.

라인은 좋은 설명과 함께

+0

좋은 대답 (arg의 명명 된 요소의 길이가> 1 없었던 경우 있지만)

setNames(as.list(unlist(args, use.names = F)), names(args)) 

같은 것을 그때는 어떤 경우에 작동 할 수 있다면 좋은 설명과 함께 좋은 질문에. 좋은. – thelatemail

+0

고마워요! 그것은 완벽하게 이해할 수 있으며 그것이 효과적이었고 의심 스러웠던 것처럼 그 대답은 기초에 대한 좋은 통찰력을 제공했습니다. –