2012-06-16 32 views
16

Điều này khiến tôi khá tệ. Bạn có thể viết tắt tên danh sách? Tôi chưa bao giờ để ý đến nó trước đây và tôi đã hoàn toàn say mê như một ngày. Ai đó có thể giải thích những gì đang xảy ra ở đây và tại sao nó có thể hữu ích hơn nó là khủng khiếp? Và tại sao nó không phù hợp như vậy ở phía dưới? Và nếu tôi có thể tắt nó đi?Bạn có thể viết tắt tên danh sách? Tại sao?

> wtf <- list(whatisthe=1, pointofthis=2) 
> wtf$whatisthe 
[1] 1 
> wtf$what 
[1] 1 

> wtf <- list(whatisthe=1, whatisthepointofthis=2) 
> wtf$whatisthepointofthis 
[1] 2 
> wtf$whatisthep 
[1] 2 
> wtf$whatisthe 
[1] 1 
> wtf$what 
NULL 
+5

Đó không phải là không phù hợp. Bản chất hàng đầu của tên được giải quyết nếu và chỉ khi có một trận đấu duy nhất. –

+1

+1 để làm cho tôi suy nghĩ về * tại sao * '$' được thực hiện theo cách này. –

+0

Điều này quay trở lại những ngày sớm nhất của S tại phòng thí nghiệm Bell. Đó là một điều xấu, nhưng tôi vẫn sử dụng nó đôi khi để lưu gõ. Cũng làm việc trong các đối số hàm, Ví dụ 'dự đoán (m, type =" resp ")' hoặc 'cor (x, y, use =" pair ")'. –

Trả lời

16

Tôi nghi ngờ rằng khớp một phần bởi các nhà điều hành $ là một đẹp (r) tính năng sử dụng tương tác trở lại trong những ngày trước khi hoàn thành tab đã được triển khai

Nếu bạn không thích hành vi đó, bạn có thể sử dụng Thay vào đó, hãy sử dụng toán tử "[[". Phải mất một đối số exact=, cho phép bạn kiểm soát hành vi đối sánh một phần và mặc định là TRUE.

wtf[["whatisthep"]]     # Only returns exact matches 
# NULL 

wtf[["whatisthep", exact=FALSE]] # Returns partial matches without warning 
# [1] 2 

wtf[["whatisthep", exact=NA]]  # Returns partial matches & warns that it did 
# [1] 2 
# Warning message: 
# In wtf[["whatisthep", exact = NA]] : 
# partial match of 'whatisthep' to 'whatisthepointofthis' 

(Đây là một lý do tại sao "[[" thường được ưa thích để $ trong chương trình R. Một là khả năng làm X <- "whatisthe"; wtf[[X]] này nhưng không X <- "whatisthe"; wtf$X này.)

+0

Tuyệt vời, cảm ơn. Tôi chắc rằng tính năng tự động hoàn thành được cho là hữu ích, nhưng nó chỉ cảm thấy khá đáng ngại. Tôi chỉ đang chờ nó cắn một lần nữa. – enfascination

+0

@ user1073999 - Tôi đồng ý. Tôi thậm chí cảm thấy như tôi đã nhìn thấy một số các hiệu trưởng R than vãn rằng quyết định thiết kế ban đầu, nhưng không thể ngay bây giờ nhớ ở đâu. Tôi muốn được quan tâm nếu có ai khác đã thấy điều đó. –

+2

Suy nghĩ thêm, tôi có thể thấy rằng sẽ hữu ích khi sử dụng tương tác trước khi tự động hoàn thành tab được triển khai. –

2

Đối với các tên phần tử danh sách (và tên tham số chức năng), R áp dụng các thuật toán sau đây:

Nếu có một trận đấu chính xác cho các mục, sử dụng nó. Nếu không có kết quả khớp chính xác, hãy tìm các kết quả phù hợp từng phần. Nếu có chính xác một phần khớp, hãy sử dụng nó. Nếu không, không sử dụng gì cả.

+0

Tôi nghĩ thuật toán hoàn chỉnh cũng sử dụng kết hợp vị trí. – Andrie

+0

Bạn có thể xây dựng? Ví dụ '> a <- hàm (aa, ab) {dán (aa, ab, sep = "")}' '> a (a = 1, a = 2)' 'Lỗi trong (a = 1, a = 2): đối số chính thức "aa" được so khớp bởi nhiều đối số thực tế ' –

+0

Tôi chỉ quan sát rằng bạn không phải đặt tên đối số, trong trường hợp đó R sử dụng đối sánh vị trí. Vì bạn có thể trộn các trường hợp có tên đối số và không có tên, một câu trả lời hoàn chỉnh nên đề cập đến điều này, theo ý kiến ​​của tôi. Vì vậy, trong ví dụ của bạn 'a (1, ab = 2)' sẽ vẫn hoạt động, cũng như 'a (ab = 2, 1)'. – Andrie

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