2017-09-27 1 views
0

항상 R 코드를 가능한 유연하게하고 싶습니다. 현재 필자는 매개 변수 델타를 기준으로 비교할 3 개의 (잠재적으로 더 많은) 커브를 가지고 있지만 델타의 값을 어디에서나 (또는 ​​심지어 피할 수있는 경우 얼마나 많은 값을) 하드 코드하고 싶지는 않습니다.R 범례 변수 대체

델타 값에 대한 그리스어와 변수 대체를 모두 포함하는 범례를 만들기 위해 각 범례 항목의 형식은 'delta = 0.01'입니다. 여기서 델타는 그리스어이고 0.01은 변수로 결정됩니다. paste, substitute, bquoteexpression의 다양한 조합이 시도되었지만 완성 된 범례에 일부 축 어적 코드가 남았거나 항상 '델타'를 기호 형식에 넣지 못했습니다.

delta <- c(0.01,0.05,0.1) 
plot(type="n", x=1:5, y=1:5) #the curves themselves are irrelevant 
legend_text <- vector(length=length(delta)) #I don't think lists work either 
for(i in 1:length(delta)){ 
    legend_text[i] <- substitute(paste(delta,"=",D),list(D=delta[i])) 
} 
legend(x="topleft", fill=rainbow(length(delta)), legend=legend_text) 

하나의 항목에 대한 legend=substitute(paste(delta,"=",D),list(D=delta[1]) 작품 이후로, 나는 또한 델타의 길이를 고정하는 '반 하드 코드'버전을 일을 시도했다 :

legend(x="topleft", fill=rainbow(length(delta)), 
     legend=c(substitute(paste(delta,"=",A), list(A=delta[1])), 
       substitute(paste(delta,"=",B), list(B=delta[2])), 
       substitute(paste(delta,"=",C), list(C=delta[3]))) 
    ) 

을하지만, 이것은 이전과 같은 문제가 있습니다 .

내가 할 수있는 방법이 있습니까, 아니면 델타의 각 업데이트와 함께 수동으로 코드를 변경해야합니까?

답변

0

lapply()as.expression()을 사용하여 범례 라벨을 생성 해보세요. plotmath 당신은 등호 얻을 ==이 필요하다는 것을 또한 개인의 표현

legend_text <- as.expression(lapply(delta, function(d) { 
    bquote(delta==.(d)) 
})) 

주를 만들 bquote를 사용합니다. 아무것도 실제로 여기에 문자열이 없기 때문에 또한 paste()에 대한 필요가 없습니다.