Существует множество возможностей для достижения этой цели, в зависимости от того, как далеко вы хотите зайти. Самый простой способ - просто назначить переменную W в глобальной среде и вызвать другие сценарии оттуда. Тем не менее, это побеждает цель функции.
Самое простое решение - использовать опцию local=TRUE
в вызове source
. Это позволяет исходному скрипту выполнять поиск в локальной среде функции.
Иллюстрация: дан файл Myscript.r:
cat("In script : ",x," ",W,"\n")
afunc <- function(y){
cat("within function : ",y," ",W,"\n")
}
afunc(x)
Вы можете определить функцию, которая получает ее локально:
mynewfunc <- function(x){
W <- "My W"
source("Myscript.R",local=TRUE)
}
avar <- "Working in R"
mynewfunc(avar)
И делает то, что ему нужно: он находит x
, который был передан из глобальной среды в mynewfunc
, и находит W
, назначенный в локальной среде mynewfunc
:
In script : Working in R My W
within function : Working in R My W
Самый надежный вариант - сделать это в пакете. В основном вы объявляете их в одном из исходных файлов вашего пакета. Константа W будет загружена и может использоваться всеми функциями в этом пакете. Если вы работаете с пространствами имен, вы можете решить, хотите ли вы экспортировать константу или оставить ее скрытой, чтобы к ней могли обращаться только ваши собственные функции. Более подробную информацию об этом вы найдете в разделе «Написание расширений R».
Получение файлов сценариев внутри функций - это менее надежный способ работы с различными функциями. Вы можете получить очень неожиданные результаты, в зависимости от переменных в вашем рабочем пространстве. Если вы хотите попробовать это, я определенно предлагаю вам начать создавать собственные пакеты. Это довольно просто, если нет кода на C.