R语言中是否有像C++、C#等其他编程语言中的+=
(加上等于)或者++
(自增)这样的概念?
R语言中是否有像C++、C#等其他编程语言中的+=
(加上等于)或者++
(自增)这样的概念?
按照@GregaKešpret的方法,您可以创建一个中缀运算符:
`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2))
x = 1
x %+=% 2 ; x
x = %+=% y/2
会返回 x = (x + y)/2
。加上括号,即 x = %+=% (y/2)
就可以解决这个问题了。 - knrumseyR语言没有类似于C中的自增运算符++的概念。然而,你可以轻松地自己实现它,例如:
inc <- function(x)
{
eval.parent(substitute(x <- x + 1))
}
在那种情况下,您需要调用
x <- 10
inc(x)
然而,它引入了函数调用的开销,因此比自己键入 x <- x + 1
的速度慢。如果我没有错,增量运算符
的引入是为了让编译器更容易将代码直接转换为机器语言指令。
INC
指令主要是为了实现计数器而在处理器中引入的(参见英特尔软件开发手册)。我会更新答案。 - banan3'14R并没有这些操作,因为R中的大多数对象都是不可变的。它们不会改变。通常情况下,当你看起来在修改一个对象时,实际上你是在修改一个副本。
R语言没有提供这些操作,因为它内部的大部分对象是不可变的,也就是说它们的值一旦被赋予就无法再次修改。因此,在对某个对象进行所谓的“修改”时,实际上是创建了一个新的拷贝并进行了修改,而原始对象仍然保持不变。增加和减少10。
require(Hmisc)
inc(x) <- 10
dec(x) <- 10
install.packages('roperators')
require(roperators)
x <- 1:3
x %+=% 1; x
x %-=% 3; x
y <- c('a', 'b', 'c')
y %+=% 'text'; y
y %-=% 'text'; y
# etc
+
。如果使用一元的+
,并且它的参数本身是一个一元的+
调用,则增加调用环境中相关对象的值。`+` <- function(e1,e2){
# if binary `+`, keep original behavior
if(!missing(e2)) return(base::`+`(e1, e2))
# if inner call isn't unary `+` called on language object,
# keep original behavior
inner_call <- substitute(e1)
inner_call_is_plus_on_lng <-
length(inner_call) == 2 &&
identical(inner_call[[1]], quote(`+`)) &&
is.language(inner_call[[2]])
if(!inner_call_is_plus_on_lng) return(base::`+`(e1))
eval.parent(substitute(X <- X + 1, list(X = inner_call[[2]])))
}
x <- 10
++x
x
#> [1] 11
其他操作不会改变:
x + 2
#> [1] 13
x ++ 2
#> [1] 13
+x
#> [1] 11
x
#> [1] 11
我不太能推荐这样做,因为您正在处理被优化的基元类型。
++1
返回1。 - moodymudskipper我们也可以使用inplace
library(inplace)
x <- 1
x %+<-% 2
如果你想在数组中使用 i++
来增加索引,可以尝试使用 i <- i + 1
,例如:
k = 0
a = 1:4
for (i in 1:4)
cat(a[k <- k + 1], " ")
# 1 2 3 4
但是这里的<-
不能被替换为=
,因为它不会更新索引。
k = 0
a = 1:4
for (i in 1:4)
cat(a[k = k + 1], " ")
# 1 1 1 1
由于在编程中,=
和<-
并不总是等价的,正如在?`<-`
中所说。
这里有一种更简单的方法来增加一个变量。
inc = 1
for(i in 1:10){
print(paste("Value of inc: ", inc))
inc = sum(c(inc, 1))
}
您将会得到以下结果
[1] "Value of inc: 1"
[1] "Value of inc: 2"
[1] "Value of inc: 3"
[1] "Value of inc: 4"
[1] "Value of inc: 5"
[1] "Value of inc: 6"
[1] "Value of inc: 7"
[1] "Value of inc: 8"
[1] "Value of inc: 9"
[1] "Value of inc: 10"
x += 1
或x++
的方式不行 -x = x + 1
是有效的。 - Joshua Dawson