Zauważyłem tę nieoczekiwaną cechę:Listy R - w jaki sposób obsługiwane są nazwy elementów?
foo <- list(whatever=1:10)
Teraz następujące prace, a także:
foo$wha
foo$w
foo$whateve
Jednak po nie:
foo[["wha"]]
To ma nieoczekiwane konsekwencje (nieoczekiwane dla mnie), że jeśli masz dwie potencjalne nazwy, na przykład "CXCL1" i "CXCL11", a chcesz k teraz, czy CXCL1 nie ma wartości null sprawdzając !is.null(foo$CXCL1)
, zwróci TRUE, nawet jeśli CXCL1 ma wartość null, ale CXCL11 nie jest.
Moje pytania są następujące:
- Jak to działa?
- Jaka jest różnica między
foo$whatever
ifoo[["whatever"]]
? - Dlaczego ktoś chciałby tego zachowania i jak mogę go wyłączyć?
[Oto moja odpowiedź na podobne pytanie] (http://stackoverflow.com/questions/11066464/you-can-abbreviate-list-names-why/11066583#11066583) –
'help (" [[") 'ma tu wielką wartość (omawia" częściowe dopasowanie ", którego doświadczasz). Powinieneś rozważyć 'foo [[thing", exact = TRUE]] 'jeśli potrzebujesz precyzji w dopasowywaniu (to jest domyślne dla' [[choć)). Możesz także ustawić 'opcje (warnPartialMatchDollar = TRUE)', aby uzyskać ostrzeżenia. – hrbrmstr
Możesz uniknąć problemu w swoim przypadku, wypełniając listę wszystkimi potencjalnymi nazwami i ustawiając je np. 'CXCL1 = NULL' –