@Gerrio_Barbosa, esse comportamento do R se chama correspondência parcial (partial matching em inglês). Você pode usar esse recurso em vários lugares:
# Partial matching com $
lista <- list(elemento = 1)
lista$e
#> [1] 1
# Partial matching em argumentos
funcao <- function(argumento) {
argumento
}
funcao(a = 1)
#> [1] 1
Created on 2022-06-05 by the reprex package (v2.0.1)
Você pode, inclusive, usar correspondência parcial em vários argumentos de uma mesma chamada de função desde que não haja ambiguidade. Como no R podemos chamar os argumentos em qualquer ordem (especificados os seus nomes), não pode haver ambiguidade acerca de a qual argumento estamos nos referindo:
# Função de exemplo
cola <- function(arg1, arg2) {
cat(paste(arg1, arg2))
}
# Por padrão, os argumentos vêm na ordem
cola(1, 2)
#> 1 2
# Especificando os argumentos, podemos usar qualquer
# ordem
cola(arg1 = 1, arg2 = 2)
#> 1 2
cola(arg2 = 2, arg1 = 1)
#> 1 2
# Como um dos argumentos está especificado, podemos
# recorrer ao partial matching no outro
cola(a = 1, arg2 = 2)
#> 1 2
cola(arg1 = 1, a = 2)
#> 1 2
# Podemos até inverter a ordem dos argumentos, mas
# um deles sempre tem que estar especificado
cola(arg2 = 2, a = 1)
#> 1 2
cola(a = 2, arg1 = 1)
#> 1 2
# Mas aqui ocorre um problema. Estamos usando arg1
# ou arg2 primeiro? A função não consegue saber e
# ela não assume que eles estão em ordem porque você
# escolheu colocar os nomes deles.
cola(a = 1, a = 2)
#> Error in cola(a = 1, a = 2):
#> formal argument "arg1" matched by multiple actual arguments
Created on 2022-06-05 by the reprex package (v2.0.1)
Se você quiser saber mais sobre o mecanismo pelo qual ocorre a correspondência parcial, basta olhar a função pmatch()
. Dada uma série de abreviações e uma série de argumentos, ela retorna as correspondências:
# A correspondência é com o 2o valor
pmatch("e", c("argumento", "elemento"))
#> [1] 2
# Ambiguidade
pmatch("a", c("arg1", "arg2"))
#> [1] NA
Created on 2022-06-05 by the reprex package (v2.0.1)
P.S.: Nunca use correspondência parcial. Isso é um recurso antigo do R que ajuda a criar chamadas mais curtas, mas ele é altamente problemático. Por exemplo, se uma função for atualizada e ganhar um novo argumento, pode ser que o seu código antigo pare de funcionar! Isso sem falar na dificuldade adicional que você está criando para quem lê o seu código… Hoje em dia, com o RStudio, você pode simplesmente digitar a primeira letra de um argumento e apertar TAB para que a própria IDE complete o seu nome.