как сохранить переменную, не удаленную с помощью rm (list = ls ()) - PullRequest
4 голосов
/ 04 мая 2011

Я хотел бы сохранить переменную в R, которая не будет удалена rm(list=ls())

Я думаю, что это возможно, так как, например, установленные функции и данные из пакетов не удаляются.

Edit: одна возможность может быть установить переменную env только для этого R сеанса.Я пробовал Sys.setenv(ENV_VAR = 1), но Sys.getenv(ENV_VAR) возвращает ошибку.

(Я на Windows 32bit, R 2.12.1)

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

Во-первых, чтобы получить переменную среды, нужно заключить ее в кавычки:

Sys.setenv(ENV_VAR = 1)
Sys.getenv("ENV_VAR")

Во-вторых, как сказал Чейз, новая среда - это путь, но вы также должны присоединить ее:

e <- new.env()
e$foo <- 42
attach(e, name='myvars')
rm(list=ls()) # Remove all in global env
foo # Still there!

... и отсоединить его:

detach('myvars')
4 голосов
/ 04 мая 2011

Правильный ответ предполагает помещение вашей переменной в новую среду.Один быстрый и грязный трюк заключается в добавлении . перед переменной, чтобы она не была подхвачена ls().

> x <- 1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> .x <- x
> ls()
[1] "x"
> rm(list = ls())
> ls()
character(0)
> .x
 [1]  1  2  3  4  5  6  7  8  9 10
2 голосов
/ 04 мая 2011

Другой вариант следующий:

# make busy workspace
x<-1
y<-2
z<-3

> ls()
[1] "x" "y" "z"

# determine what to keep
save<-"x"
#discard the rest
rm(list=ls()[!(ls()%in%save)])

> ls()
[1] "x"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...