Table Of Contents
Lets suppose the following R
snippet:
SGD <- function(...) {
# Stochastic gradient descent
#
w <- matrix(rep(0,3))
# ...
update <- function(x) {
# Here we need to modify w
}
while (above.tolerance) {
w.old <- w
apply(data, 1, update)
# ...
}
w
}
The above code does not work, although update
function can see the value of w
, which is in SDG
scope, can not modify its value, what update
modifies its a local copy of w
in its scope. For SDG
to work, we need to update w
for each point and that in SDG
scope this new value is reflected.
For the code to work, at first I thought in declaring w
as a global variable with <<-
operator, which is a bad idea, because w
would be global to the entire R
program. In this case, we only that w
can be modified by update
function. So searching I found a workaround to create a local environment to the function SDG
, and then use it inside update
, here is the code:
SGD <- function(...) {
# Stochastic gradient descent
#
w.env <- new.env()
w.env$w <- matrix(rep(0,3))
# ...
update <- function(x) {
# Here we need to modify w
# Using w.env$w
}
while (above.tolerance) {
w.old <- w.env$w
apply(data, 1, update)
# ...
}
w.env$w
}
With this little change, update
is accessing and modifying w
, updating it correctly in each apply
iteration.
Hope it helps.
Bibliography
- Advanced environments in R | adv-r.had.co.nz
Spot a typo?: Help me fix it by contacting me or commenting below!