Я предполагаю, что речь идет о R ... R не передает аргументы по ссылке (окружение и ссылочные классы (S5) являются исключением, но это вне текущего диапазона абстракции).Таким образом, когда вы пишете
addThree<-function(x){
x<-x+3
}
4->y
addThree(y)
y
по-прежнему 4 в конце кода, потому что внутри функции, x
является свежей копией значения y
s, а не y
сама по себе (опять же, не совсем, но это детали более высокого порядка).
Таким образом, вы должны адаптироваться к схеме передачи по копированию R и вернуть измененное значение и присвоить его обратно вашей переменной (используя старую формулировку, в R нет процедур:
addThree<-function(x){
return(x+3)
}
4->y
addThree(y)->y
#y is now 7
Не волнуйтесь, это работает плавно для еще более сложных объектов, потому что R является сборщиком мусора и имеет ленивую оценку.
BTW,вы можете опустить return
, если хотите вернуть последнее значение, созданное в функции, т.е. определение addThree
может выглядеть так:
addThree<-function(x) x+3