Первая точка
<<-
является НЕ оператором, назначаемым глобальной переменной.Он пытается присвоить переменную в ближайшем родительском окружении.Так, скажем, это приведет к путанице:
f <- function() {
a <- 2
g <- function() {
a <<- 3
}
}
затем
> a <- 1
> f()
> a # the global `a` is not affected
[1] 1
Второй пункт
Вы можете сделать это, используя Reduce
:
Reduce(function(a, b) {a[a==b] <- a[a==b]-1; a}, 2:6, df)
или apply
apply(df, c(1, 2), function(i) if(i >= 2) {i-1} else {i})
Но
просто, этого достаточно:
ifelse(df >= 2, df-1, df)