2011-04-21 8 views

Respuesta

11

de incremento y decremento por 10.

require(Hmisc) 
inc(x) <- 10 

dec(x) <- 10 
+0

Estas funciones parecen haberse eliminado de 'Hmisc' a partir de la versión 4.1.0. – llasram

27

R no tiene un concepto de increment operator (como por ejemplo ++ en C). Sin embargo, no es difícil de implementar uno mismo, por ejemplo:

inc <- function(x) 
{ 
eval.parent(substitute(x <- x + 1)) 
} 

En ese caso ustedes llamarían

x <- 10 
inc(x) 

Sin embargo, se supone cargas llamada a la función, por lo que es lento que escribir x <- x + 1 tú mismo. Si no me equivoco, se introdujo increment operator para facilitar el trabajo para el compilador, ya que podría convertir el código a esas instrucciones de lenguaje de máquina directamente.

+1

Esta función no puede devolver el valor y luego incrementar como un aumento posterior ++. Es más similar a + = o preincrement ++. – Megatron

11

R no tiene estas operaciones porque (la mayoría) de los objetos en R son inmutables. Ellos no cambian Normalmente, cuando parece que estás modificando un objeto, en realidad estás modificando una copia.

+10

Si bien la inmutabilidad es una propiedad excelente/deseable para los objetos (léase: menos errores), no creo que la inmutabilidad se relacione con la pregunta + =. En otros idiomas, + = se puede aplicar a tipos inmutables (como cadenas en .net). La operación simplemente crea un nuevo objeto y asigna la variable dada a ese nuevo objeto. La inmutabilidad se mantiene y la variable se actualiza. – SFun28

+3

Buen punto. Sin embargo, la inmutabilidad hace que este tipo de operación sea menos natural. – hadley

44

Siguiendo @ GregaKešpret puede realizar un operador infijo:

`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2)) 
x = 1 
x %+=% 2 ; x 
Cuestiones relacionadas