tôi đã nhận thấy tính năng bất ngờ này:R danh sách - các tên phần tử được xử lý như thế nào?
foo <- list(whatever=1:10)
Bây giờ, các công trình sau đây cũng như:
foo$wha
foo$w
foo$whateve
Tuy nhiên, sau đây không:
foo[["wha"]]
này có những hậu quả bất ngờ (bất ngờ cho tôi, nghĩa là) nếu bạn có hai tên tiềm năng, như "CXCL1" và "CXCL11" và bạn muốn k bây giờ cho dù CXCL1 không phải là null bằng cách kiểm tra !is.null(foo$CXCL1)
, nó sẽ trả về TRUE ngay cả khi CXCL1 null, nhưng CXCL11 thì không.
Câu hỏi của tôi là:
- Làm thế nào mà làm việc?
- Sự khác biệt giữa
foo$whatever
vàfoo[["whatever"]]
là gì? - Tại sao mọi người lại muốn hành vi này và làm cách nào để vô hiệu hóa hành vi này?
[Đây là câu trả lời của tôi cho một câu hỏi tương tự] (http://stackoverflow.com/questions/11066464/you-can-abbreviate-list-names-why/11066583#11066583) –
'help (" [[") 'có giá trị lớn ở đây (nó thảo luận về 'kết hợp từng phần' bạn đang gặp phải). Bạn nên xem xét 'foo [[" "thing", exact = TRUE]] 'nếu bạn cần độ chính xác trong kết hợp (đó là mặc định cho' [['mặc dù). Bạn cũng có thể đặt 'options (warnPartialMatchDollar = TRUE)' để nhận cảnh báo. – hrbrmstr
Bạn có thể tránh sự cố trong trường hợp của mình ít nhất bằng cách điền vào danh sách với tất cả các tên tiềm năng và đặt chúng, ví dụ: 'CXCL1 = NULL' –