Вы можете сокращать имена списков? Зачем? - программирование
Подтвердить что ты не робот

Вы можете сокращать имена списков? Зачем?

Мне это стало плохо. Вы можете сокращать имена списков? Я никогда не замечал этого раньше, и я полностью ввернулся, как день. Может ли кто-нибудь объяснить, что здесь происходит и почему это может быть более полезно, чем ужасно? И почему его непоследовательность подобна этому внизу? И если я могу отключить его?

> 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  
4b9b3361

Ответ 1

Я подозреваю, что частичное совпадение с помощью оператора $ было приятной функцией (r) для интерактивного использования за предыдущие дни после того, как было выполнено внесение вкладок

Если вам не нравится это поведение, вы можете использовать вместо него оператор "[[". Он принимает аргумент exact=, который позволяет вам контролировать поведение частичного сопоставления, а по умолчанию - 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'

(Это одна из причин, почему "[[" обычно предпочтительнее $ в программировании R. Другой способ - это сделать X <- "whatisthe"; wtf[[X]], но не этот X <- "whatisthe"; wtf$X.)

Ответ 2

Для имен элементов списка (и имен параметров функций) R применяет следующий алгоритм:

Если имеется точное соответствие для элемента, используйте его. Если нет точного соответствия, найдите частичные совпадения. Если есть ровно одно частичное совпадение, используйте его. В противном случае ничего не используйте.