Вы можете заставить переменную быть локальной версией с помощью этой функции:
get_local <- function(variable)
{
get(variable, envir = parent.frame(), inherits = FALSE)
}
Сравните эти случаи
y <- 0
f <- function()
{
x <- y
}
print(f()) # 0
y <- 0
f <- function()
{
y <- get_local("y")
x <- y
}
print(f()) # Error: 'y' not found
В зависимости от того, что вы делаете, вы также можете проверить, является ли y
аргументом для f
, используя formalArgs
или formals
.
g <- function(x, y = TRUE, z = c("foo", "bar"), ...) 0
formalArgs(g)
# [1] "x" "y" "z" "..."
formals(g)
#$x
#
#
#$y
#[1] TRUE
#
#$z
#c("foo", "bar")
#
#$...
РЕДАКТИРОВАТЬ: более общий вопрос о том, «как отключить лексическую область видимости без изменения содержимого функций», решить сложнее. Я совершенно уверен, что правила области видимости довольно укоренились в R. Альтернативой может быть использование S-Plus, так как он имеет различные правила области видимости .