2011-09-07 40 views
11

Tôi đã nhận thấy một số hành vi lạ trong các lớp tham chiếu R khi cố gắng triển khai một số thuật toán tối ưu hóa. Dường như có một số phép thuật phân tích cú pháp đằng sau hậu trường liên quan đến các phương thức khởi tạo trong một cách cụ thể khiến việc làm việc với các hàm ẩn danh trở nên khó khăn. Dưới đây là một ví dụ minh họa sự khó khăn: Tôi xác định một hàm để tối ưu hóa (f_opt), một hàm chạy tối ưu trên nó và một lớp tham chiếu có hai phương thức này. Hành vi kỳ lạ sẽ rõ ràng hơn trong mã sốPhương thức khởi tạo phương thức trong các lớp tham chiếu R

f_opt <- function(x) (t(x)%*%x) 

do_optim_opt <- function(x) optim(x,f) 
do_optim2_opt <- function(x) 
    { 
    f(x) #Pointless extra evaluation 
    optim(x,f) 
    } 

optClass <- setRefClass("optClass",methods=list(do_optim=do_optim_opt, 
           do_optim2=do_optim2_opt, 
           f=f_opt)) 
oc <- optClass$new() 
oc$do_optim(rep(0,2)) #Doesn't work: Error in function (par) : object 'f' not found 
oc$do_optim2(rep(0,2)) #Works. 
oc$do_optim(rep(0,2)) #Parsing magic has presumably happened, and now this works too. 

Chỉ là tôi, hoặc điều này cũng giống như lỗi cho người khác?

+1

Bạn đã xem trợ giúp ("lực lượng") chưa? –

+0

Tôi đồng ý với Allan E. Điều này chắc chắn giống như một ví dụ điển hình về đánh giá lười biếng (không). –

Trả lời

6

This bài trong R-devel dường như có liên quan, với workaround

do_optim_opt <- function(x, f) optim(x, .self$f) 

vẻ đáng bưu điện đến R-devel.

+0

Điều đó đã sửa nó. Cảm ơn rất nhiều! – sbarthelme

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