2013-02-10 72 views
9

Vấn đề:Sử dụng biến cục bộ

Làm thế nào để xác định các biến địa phương trong phạm vi trong một r-mã.

Ví dụ:

Trong C++ ví dụ sau định nghĩa một phạm vi, và các biến khai báo trong phạm vi là không xác định trong mã bên ngoài.

{ 
    vector V1 = getVector(1); 
    vector V1(= getVector(2); 
    double P = inner_product(V1, V2); 
    print(P); 
} 
// the variable V1, V2, P are undefined here! 

Lưu ý: Mã này chỉ là để minh họa cho ý tưởng.

thực hành này có những ưu điểm của:

  • Giữ namespace toàn cục sạch;
  • đơn giản hóa mã;
  • xóa sự mơ hồ, đặc biệt khi biến được sử dụng lại mà không cần khởi tạo.

Trong R, có vẻ như với tôi rằng khái niệm này chỉ tồn tại bên trong các định nghĩa hàm. Vì vậy, để tái tạo các mã ví dụ trước đó, tôi sẽ cần phải làm một cái gì đó như thế này:

dummy <- function() { 
    V1 = c(1,2,3); 
    V2 = c(1,2,3); 
    P = inner_product(V1, V2); 
    print(P); 
} 
dummy(); 
# the variable V1, V2, P are undefined here! 

hoặc, một cách thậm chí mơ hồ hơn, khai báo một chức năng ẩn danh để ngăn chặn các cuộc gọi chức năng:

(function() { 
    V1 = c(1,2,3); 
    V2 = c(1,2,3); 
    P = inner_product(V1, V2); 
    print(P); 
})() 
# the variable V1, V2, P are undefined here! 

Câu hỏi

có một cách thanh lịch để tạo ra biến địa phương?

+0

Không có chức năng nào trong các gói mặc định có tên inner_product nhưng sử dụng vector thông thường "*" sẽ cung cấp cho bạn điều đó. Điều này: '(hàm() { V1 = c (1,2,3); V2 = c (1,2,3); P = V1 * V2; in (P); })() 'cho' # [1] 1 4 9'. Tôi không hiểu tại sao đó là bất kỳ ít rõ ràng hoặc đơn giản hơn so với phiên bản C++. Nếu mã của bạn đang ném lỗi, đó không phải là do các vấn đề về phạm vi, nhưng vì bạn đang bỏ qua các thông báo lỗi. Nếu đó không phải là những gì bạn đang nói với bình luận exclamatory của bạn thì bạn cần phải giải thích thêm. –

+0

nó đã được đề cập rằng mã đã được chỉ để minh họa cho câu hỏi, và không để đối phó với sản phẩm bên trong.Nhận xét thứ hai cho câu trả lời tốt hơn, bao gồm việc sử dụng cấu trúc 'cục bộ', chẳng hạn như địa phương ({c = c (1,2,3); d = c (2,3,4); e = c * d; print (e)}) – Daniel

+0

Tôi e rằng tôi vẫn không hiểu ý nghĩa của "biến V1, V2, P là không xác định ở đây!". –

Trả lời

1

Bạn có thể tạo environment mới nơi biến của bạn có thể được xác định; đây là cách phạm vi cục bộ trong một hàm được định nghĩa.

Bạn có thể đọc thêm về kiểm tra here

này sự giúp đỡ cho environment cũng ví dụ: gõ vào R console của bạn ?environment

12

Sử dụng local. Sử dụng ví dụ của bạn:

local({ 
    V1 = c(1,2,3); 
    V2 = c(1,2,3); 
    P = inner_product(V1, V2); 
    print(P); 
}) 
# the variable V1, V2, P are undefined here! 
Các vấn đề liên quan