2015-03-04 3 views
0

У меня есть функция:Присвоить .GlobalEnv с Назначают

myfunctionIs=myfunct(x,y){ 
#Some calculations and assign my lists to globalenv 
theList1<<-theList1 
theList2<<-theList2 

#Nested function 
function(...){ 
theList1=get("theList1") 
theList2=get("theList2") 

##Some calculations... 
#NamesList calculation 
NamesList= ###Some Calculations 

ListContainer=c(deparse(substitute(theList1)),deparse(substitute(theList2))) 

for (i in seq_along(ListContainer)){ 
     assign(ListContainer[i],mapply(function(x,y) { 

      ##Some calculations 

      return(x)  

     },x=get(ListContainer[i],envir=parent.env(environment())),y=NamesList,SIMPLIFY = FALSE), 
     envir=.GlobalEnv) 
     } 

}} 

Я пытаюсь присвоить theList1 и theList2 обратно .GlobalEnv, но я получаю ошибку

Error in get(ListContainer[i], envir = parent.env(environment())) : 
    object 'structure(list("2002-12-31" = structure(list(Date = c("2000-01-31", ' not found 

Я считаю, что ошибка исходит от

get(ListContainer[i],envir=parent.env(environment())) 

Потому что calculations work correctly if I work in GlobalEnvironment.

Любые идеи? С наилучшими пожеланиями

EDIT Это работает: Изменить ListContainer на:

ListContainer=c("theList1","theList2") 

Был какой-то вопрос с deparse(substitute... внутри функции.

+1

Что вы действительно пытаетесь сделать? Этот код довольно грязный. Я могу заверить вас, что использование '<< -' и 'assign' почти не требуется, и я (почти) никогда их не использую. Вместо того, чтобы назначать объект globalEnv, почему бы вам не поместить все объекты в список и просто работать с этим? – Andrie

+0

@Andrie Есть некоторые причины, по которым код грязный, но здесь нет вопроса;) И если вы его не используете, почему я не должен его использовать? – user1665355

+1

Я не использую его, потому что, вероятно, гораздо проще. Вы просите «любые идеи». У меня много идей, но это очень поможет, если вы расскажете, что вы действительно хотите сделать. – Andrie

ответ

0

Это работает: Изменить ListContainer на:

ListContainer=c("theList1","theList2") 

Был какой-то вопрос с deparse(substitute(..)) части.

Или, может быть, может работать также с некоторыми изменениями:

ListContainer=c(quote(theList1),quote(theList2)) 

, а затем

eval(ListContainer[i]) 

в петле.

Смежные вопросы