как сохранить переменную, не удаленную rm (список =ls())

#r #environment-variables

#r #переменные среды

Вопрос:

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

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

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

(Я на Windows 32bits, R 2.12.1)

Ответ №1:

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

 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')
  

Комментарии:

1. В основном согласен, но я не уверен в использовании attach . Попробуйте with вместо этого. 4dpiecharts.com/2011/04/29 /…

Ответ №2:

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

Ответ №3:

Другой вариант заключается в следующем:

 # 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"
  

Комментарии:

1. хорошая идея, но у меня нет контроля над этой командой. Он выполняет rm(list=ls()) и все