pone operadores operador mayor logicos igual distinto diferente condicional como caracteres booleanos r data.table deprecated assignment-operator colon-equals

mayor - operadores logicos en r



¿Cuál es el operador de asignación R:=para? (3)

Al excavar en el código fuente R (archivo R-3.2.2/src/main/gram.y líneas 2836 a 2852) encontré que el analizador / tokenizador R considera que := es un token LEFT_ASSIGNMENT .

Pero al tratar de usarlo como un operador de asignación en R.3.2.2 ,
Tengo un error (imposible encontrar la función para := ...) pero como puede ver, R lo considera como una asignación como <- :

> myVar := 42 Erreur : impossible de trouver la fonction ":=" > := Erreur : unexpected assignment in ":=" > <- Erreur : unexpected assignment in "<-"

¿Es un error o es necesario eliminar el token := del código fuente del tokenizer?

¿Hay una historia pasada sobre := operador en R?


(Nota: Esta no es una respuesta directa a la pregunta original. Ya que no tengo suficiente reputación para comentar y creo que la información a continuación es útil, la pongo como respuesta de todos modos. Déjeme saber si hay una mejor manera de hacerlo!)

Aunque no puede usar directamente := como = o <- , el operador := es muy útil en la programación con lenguaje específico de dominio (DSL) que utiliza evaluación no estándar (NSE), como dplyr y data.table . A continuación se muestra un ejemplo:

library(dplyr) df <- tibble( g1 = c(1, 1, 2, 2, 2), g2 = c(1, 2, 1, 2, 1), a = sample(5), b = sample(5) ) my_mutate <- function(df, expr) { expr <- enquo(expr) mean_name <- paste0("mean_", quo_name(expr)) sum_name <- paste0("sum_", quo_name(expr)) mutate(df, !! mean_name := mean(!! expr), !! sum_name := sum(!! expr) ) } my_mutate(df, a) #> # A tibble: 5 x 6 #> g1 g2 a b mean_a sum_a #> <dbl> <dbl> <int> <int> <dbl> <int> #> 1 1. 1. 1 3 3. 15 #> 2 1. 2. 4 2 3. 15 #> 3 2. 1. 2 1 3. 15 #> 4 2. 2. 5 4 3. 15 #> # ... with 1 more row

En el ejemplo anterior, reemplazar := dentro de la función my_mutate con = no funcionará, porque !! mean_name = mean(!! expr) !! mean_name = mean(!! expr) no es un código R válido.

Puede leer más sobre NSE y la programación con dplyr here . Hace un gran trabajo explicando cómo manejar NSE cuando se usan funciones de dplyr para escribir su propia función. Mi ejemplo anterior se copia directamente del sitio web.


Era un operador de asignación previamente permitido, vea este artículo de John Chambers en 2001.

La versión de desarrollo de R ahora permite que algunas asignaciones se escriban en estilo C o Java, utilizando el operador =. Esto aumenta la compatibilidad con S-Plus (así como con C, Java y muchos otros idiomas).

Todos los operadores de asignación previamente permitidos (<-,: =, _, y << -) permanecen completamente vigentes.

Parece que la función := ya no está presente, pero puede "volver a habilitarla" de esta manera:

`:=` <- `<-` x:=3 x [1] 3


Para aclarar, los operadores de asignación R son <- y = .

Para obtener información sobre ellos escriba:

?`<-`

En lugar de <- en su línea de comando. También existe un operador <<- afecta a la variable en el entorno principal.

Respecto a := , este operador es el operador j en el paquete data.table . Se puede leer defined as y solo se puede utilizar en un objeto data.table . Para ilustrar esto, modificamos la segunda columna a b (definimos col2 con el valor b ) cuando los valores en la primera columna son iguales a 1 :

library(data.table) dt = data.table(col1=c(1,2,1,2,3), col2 = letters[1:5]) dt[col1==1,col2:=''b'']

Para una explicación detallada:

?`:=`

Espero que se aclare.