2015-01-07 4 views
1

позволяют сказать, что у меня есть окружение с некоторыми объектами:объектов Modify в конкретной среде

myenv=new.env() 

x=data.frame(a=c(1:5),b=c(2:6)) 
y=data.frame(c=c(3:7),d=c(4:8)) 

assign("x",x,env=myenv) 
assign("y",y,env=myenv) 


ls(env=myenv) 
[1] "x"  "y" 

я тогда хочу add a column имя «г» каждое data.frame (х и у) в myenv. Как я мог это сделать?

Я понимаю, как я могу получить, например, тусклым:

sapply(mget(ls(env=myenv), myenv),dim) ###this way 
sapply(ls(env=myenv),function(x) dim(get(x,myenv))) ##or this way 

Но не могу понять, как изменить объекты в myenv.

Это работает, но не так "красивые" решение:

sapply(ls(env=myenv),function(x) { 
    trying=get(x,myenv) 
    trying[,"z"]=trying[,2]+trying[,3] 
    return(trying) 
}) 

С наилучшими пожеланиями

+0

@akrun Извините. Пример игрушки, который был напечатан с моей головы ... Это не проблема в моем «реальном» коде. См. Править выше. – user1665355

+0

@akrun Ваш пример меняет x в моем .GlobalEnv не в 'myenv' :) – user1665355

+0

@akrun Хехе спасибо, но это не решает мой вопрос :) – user1665355

ответ

2

Вы можете попробовать

assign('x', '[[<-'(x, 'c', value=NA), envir=myenv) 

Это может быть сделано в for цикле для нескольких объектов

v1 <- ls(env=myenv) 
for(i in v1){ 
    assign(i, `[[<-`(get(i), 'c', value=NA), envir=myenv) 
} 
+0

Отличное решение действительно :) – user1665355

+0

еще одно приятное решение, которое мне не нужно, это 'list2env (eapply (myenv,' [[<-', 'h', value = 1: 5), envir = myenv) ' – user1665355

+0

@ user1665355 Спасибо за примечание. Выглядит хорошо. Пожалуйста, обновите его в своем сообщении. – akrun