2012-05-02 52 views
6

Tôi đang xem liệu có thể có cùng chức năng như with() trong R trong Rcpp cho môi trường hay không.Đánh giá các biểu thức trong môi trường trong Rcpp

Ví dụ, trong RI có thể tạo ra một môi trường, thêm hai biến và sử dụng with() để đánh giá một biểu thức chỉ sử dụng variablenames:

e <- new.env() 
e$x <- 1 
e$y <- 2 

with(e, 
    x + y 
    ) 

tôi có thể làm điều gì đó tương tự trong Rcpp, nhưng nó đòi hỏi chỉ mục của môi trường:

f <- cxxfunction(signature(env="environment"), ' 
Environment e(env); 
double Res = (double)e["x"] + (double)e["y"]; 
return(wrap(Res)); 

', plugin = "Rcpp") 

f(e) 

Có thể đánh giá biểu thức chỉ sử dụng tên biến trong Rcpp không? Lý do tôi yêu cầu là vì tôi muốn viết một loại hàm C++ động mà bạn có thể thêm các biểu thức. Ví dụ với một số mã giả mà không hoạt động:

f <- cxxfunction(signature(env="environment"), sprintf(' 
Environment e(env); 
double Res; 
// Res = with(e, %s); 
return(wrap(Res)); 
','x + y'), plugin = "Rcpp") 

Trả lời

2

Tôi không nghĩ rằng bạn có thể: tại thời gian biên dịch, các biến của bạn chưa được biết. Bạn phải nghỉ mát để tra cứu động mà là những gì R nào. Về bản chất, bạn cần phải tạo lại trình phân tích cú pháp cho biểu thức x + y của mình.

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