#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()) и все