сохранить переменную get'd (после назначения) - PullRequest
0 голосов
/ 26 апреля 2019

Почему R не может найти эту переменную?

assign(paste0('my', '_var'), 2)
get(paste0('my', '_var')) ## isn't this returning an object?
save(get(paste0('my', '_var')), file =  paste0('my', '_var.RDATA'))

Это выдает ошибку:

Error in save(paste0("my", "_var"), file = paste0("my", "_var.RDATA")) : 
  object ‘paste0("my", "_var")’ not found

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

На странице справки функция save() ожидает «имена сохраняемых объектов (в виде символов или строк символов)».Эти значения не оцениваются, т. Е. Вы не можете поместить в функции, которые в конечном итоге будут возвращать сами строки или необработанные значения.Используйте параметр list=, если вы хотите вызвать функцию для возврата строки с именем переменной.

save(list=paste0('my', '_var'), file =  paste0('my', '_var.RDATA'))

Хотя использование get / assign часто не является хорошей практикой в ​​R. Они обычнолучшие способы, чтобы вы могли переосмыслить свой общий подход.

И, наконец, если вы сохраняете один объект, вы можете рассмотреть saveRDS().Часто такое поведение ожидают люди, когда используют функцию save().

1 голос
/ 26 апреля 2019

Документация для save гласит, что ... должно быть

именами объектов, которые будут сохранены (как символы или строки символов).

И действительно, если вы наберете save в консоли, вы увидите, что у источника есть строка

names <- as.character(substitute(list(...)))[-1L]

, где substitute захватывает его аргумент и не оценивает его.Итак, как следует из ошибки, он ищет объект с именем paste0('my', '_var'), а не оценивает предоставленные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...