2012-10-05 28 views
6

Khi đặt mảng, R hoạt động khác nhau tùy thuộc vào việc một trong các kích thước có chiều dài 1 hay không. Nếu thứ nguyên có chiều dài 1, thứ nguyên đó sẽ bị mất trong quá trình đặt trước:Mảng R trừ: kích thước bị mất khi chiều dài của nó là 1

ax <- array(1:24, c(2,3,4)) 
ay <- array(1:12, c(1,3,4)) 
dim(ax) 
#[1] 2 3 4 
dim(ay) 
#[1] 1 3 4 
dim(ax[,1:2,]) 
#[1] 2 2 4 
dim(ay[,1:2,]) 
#[1] 2 4 

Từ quan điểm của tôi, rìu và ay giống nhau và thực hiện cùng một tập hợp con trên chúng nên trả về mảng có cùng kích thước . Tôi có thể thấy rằng cách R xử lý hai trường hợp có thể hữu ích, nhưng nó không mong muốn trong mã mà tôi đang viết. Điều đó có nghĩa là khi tôi chuyển một mảng con vào một hàm khác, hàm sẽ nhận được một mảng thiếu một tham số, nếu tôi đã giảm kích thước chiều dài 1 ở giai đoạn trước đó. (Vì vậy, trong trường hợp này, tính linh hoạt của R làm cho mã của tôi kém linh hoạt hơn!)

Làm cách nào để ngăn R mất kích thước chiều dài 1 khi đang nạp tiền? Có cách nào khác để lập chỉ mục không? Một số cờ để thiết lập?

+0

không giống hệt nhưng có lẽ quan tâm: http://stackoverflow.com/questions/12196724/generally-disable-dimension-dropping-for-matrices –

Trả lời

14

Như bạn đã tìm thấy theo mặc định R giảm thứ nguyên không cần thiết. Thêm drop=FALSE khi lập chỉ mục có thể ngăn chặn điều này:

> dim(ay[,1:2,]) 
[1] 2 4 
> dim(ax[,1:2,]) 
[1] 2 2 4 
> dim(ay[,1:2,,drop = F]) 
[1] 1 2 4 
+0

Cảm ơn bạn, Dason. Hoàn hảo. Tôi sẽ không đoán rằng bạn có thể làm theo cách đó. (Tôi biết đó là một câu hỏi thường gặp, nhưng thật khó để xây dựng một chuỗi tìm kiếm hữu ích cho câu trả lời.) – Mars

+0

Câu hỏi tiếp theo: Làm thế nào tôi có thể nhận được thông tin cú pháp này từ hệ thống trợ giúp cài sẵn? – Mars

+0

'?" ["' Sẽ hoạt động. Hoặc 'help (" [")'. – Dason

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