2013-04-08 23 views
5

Hành vi mặc định trong R để giảm ma trận 2 chiều thành 1 hàng là thực sự thả thứ nguyên. Điều này có thể được "cố định" bằng cách đặt drop = FALSE vào cuối tìm kiếm ma trận. Có cách nào để đặt giá trị này làm mặc định không? Tôi có một chương trình khá dài và chỉ nhận ra rằng tôi sẽ phải thêm điều này vào khoảng 100 địa điểm nếu không có ... Tôi đã tìm kiếm? Tùy chọn,? '[', Và? Ma trận không có kết quả.thay thế để thả = FALSE hoặc thay đổi hành vi mặc định

+0

Viết tập lệnh Perl hoặc shell trên mã của bạn để thực hiện các thay thế. OK, có thể không dễ định nghĩa nhưng đáng để quay. – igelkott

+2

Tôi tin rằng có nhiều hack (over-riding '[', vv), nhưng nói chung tôi nghĩ rằng không có cách nào để thay đổi hành vi đó trên toàn cầu. Tùy chọn tốt nhất có thể rất tốt là cập nhật mã của bạn. – joran

+0

nhờ ai đã liên kết câu hỏi được hỏi trước đó, điều đó thật hoàn hảo. – hedgedandlevered

Trả lời

5

Bạn có thể xác định lại `[` như thế này:

old <- `[` 
`[` <- function(...) { old(..., drop=FALSE) } 

sửa đổi này cần được địa phương với phạm vi tương tác và do đó không ảnh hưởng đến thói quen mà dựa vào các hành vi khác. Không có bảo đảm, mặc dù. Và được chuẩn bị mã của mẫu này sẽ có khả năng gây nhầm lẫn cho người đọc mã của bạn, những người quen với các ngữ nghĩa khác.

Có lẽ bạn có thể thực hiện thay đổi này cục bộ thành một hàm cụ thể, thay vì tất cả mã của bạn?

Một giải pháp thay thế sẽ là viết lớp của riêng bạn cho các đối tượng ma trận, mà bạn có thể cung cấp việc triển khai toán tử con của riêng bạn. Điều này có ý nghĩa nếu bạn xây dựng ma trận ở một số địa điểm rất hạn chế, nhưng có thể là một vấn đề nếu có một số lượng lớn các đường dẫn mã xây dựng các ma trận này.

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