2012-12-28 18 views
7

Tôi đang cố gắng để có được một nhãn để có một số mũ trong đó. Dưới đây là đoạn code tôi cóSử dụng một biểu thức trong văn bản cốt truyện - In giá trị của một biến thay vì tên của nó

vall = format(cor(x,y)*cor(x,y),digits=3) 
eq <- expression(paste(R^2," = ",vall,sep="")) 
text(legend.x,legend.y,eq,cex=1,font=2) 

Nhưng văn bản đơn giản trông như thế này enter image description here

Làm thế nào để tôi có được Vall thực tế để hiển thị (và không phải là văn bản "Vall")

+1

trùng lặp? http://stackoverflow.com/questions/4973898/combining-paste-and-expression-functions-in-plot-labels –

+1

Tôi không nghĩ rằng đây là một bản sao nhưng tiêu đề của bài đăng này là một chút sai lầm. Tôi có thể đề nghị định dạng lại tiêu đề để phản ánh vấn đề khi số mũ thực sự dường như không phải là vấn đề của bạn hay không. –

+0

'sep =" "' không có gì ở đây (gắn thêm một chuỗi rỗng). Đây không phải là 'base :: paste' mà là' plotmath'. Sẽ không bị tổn thương ở đây, nhưng sẽ không làm những gì bạn muốn nếu một chuỗi không rỗng được chỉ định. –

Trả lời

13

Hãy thử bquote() , ví dụ:

set.seed(1) 
vall <- format(rnorm(1),digits=3) 
eq <- bquote(bold(R^2 == .(vall))) 
sq <- seq(0, 1, by = 0.1) 
plot(sq, sq, type = "n") 
text(0.5, 0.5, eq) 

Lý do ví dụ của bạn không hoạt động là R không bao giờ kết thúc đánh giá vall:

> eq2 <- expression(paste(R^2," = ",vall,sep="")) 
> eq2 
expression(paste(R^2, " = ", vall, sep = "")) 

âm mưu cố gắng thực hiện một điều gì đó nhưng về cơ bản, thực tế là vall.

Nói chung, bạn không cần paste() trong biểu thức cốt truyện, bạn có thể tạo biểu thức bằng cách sử dụng toán tử chuẩn và thông qua việc sử dụng toán tử bố cục. Ví dụ, đối với một biểu thức tương đương với một ví dụ của bạn sản xuất (unevaluated vall), tất cả các bạn thực sự cần là:

expression(R^2 == vall) 

bquote() là một cách để có một đối tượng thay thế bởi giá trị của nó trong một biểu thức. Bạn quấn đối tượng bạn muốn thay thế bằng giá trị của nó trong .(). R sau đó sẽ tìm đối tượng và lấy giá trị của nó và chèn nó vào biểu thức.

Xem thêm substitute() để biết cách tiếp cận khác với giao diện khác này.

+0

giải thích kỹ lưỡng +1 –

+0

điều này không hoạt động: biểu thức (R^2 == vall) – CodeGuy

+0

tuy nhiên, bquote hoạt động rất tốt. cảm ơn – CodeGuy

Các vấn đề liên quan