Как я могу определить глобальную переменную (текст) в R - PullRequest
2 голосов
/ 13 июня 2011

Я хочу разработать переменную как параметр в функции, например

W<-"Hi I am working on R"  #W is the variable, it is the text file

Функция, которую я хочу разработать, похожа на getText=function(W){} эта функция вызывает другой скрипт.Тогда W может работать как глобальная переменная в любом месте скрипта, где W может показывать "Hi I am working on R"

Ответы [ 2 ]

4 голосов
/ 09 октября 2012

Я думаю, что вы сможете достичь этого, используя следующий синтаксис:

W<<-"Hi I am working on R"

Использование << - вместо <- позволяет получить доступ к вашей переменной из любого места, если вы не маскируете ее в функциис другой переменной </p>

2 голосов
/ 13 июня 2011

Существует множество возможностей для достижения этой цели, в зависимости от того, как далеко вы хотите зайти. Самый простой способ - просто назначить переменную 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...