#r
#r
Вопрос:
Я пытаюсь назначить что-то для вывода Sys.Date(). Например, скажем, я хочу присвоить объекту имя с сегодняшней датой:
format(Sys.Date(), "%b%d") <- mtcars
Я получаю сообщение об ошибке:
недопустимая (НУЛЕВАЯ) левая часть назначения.
Я пытался:
eval(parse(text = format(Sys.Date(), "%b%d"))) <- mtcars
Выдает то же сообщение об ошибке. Чего мне не хватает / есть ли решение?
Комментарии:
1. Почему ты хочешь это сделать? Хранение данных в самом имени переменной обычно является плохой идеей в R. Было бы лучше, если бы вам нужно было динамически генерировать имена, чтобы использовать именованный список и избегать
eval()
иassign()
функций, потому что они создают ненужные накладные расходы.2. Я в основном устанавливаю временные рамки данных, над которыми я работаю — теперь я называю их вручную, что становится утомительным, чем больше «что, если» я хочу запустить. Я вижу ценность хранения их в списке, меньше беспорядка для одного, но как бы я добавил новый элемент в динамически именуемый слот в списке? У меня есть список x с элементами Sep03 и Sep09 — как бы я добавил динамически именованный элемент Sep11 в x?
3. Вы можете назначить любое строковое значение, например
x[["Sep11"]] <- mtcars
или функцию, которая возвращает строковое значениеx[[format(Sys.Date(), "%b%d")]] <- mtcars
. Тогда у вас будут все значения, аккуратно сохраненные вx
, и вы сможете получить их с помощьюx[["Sep11"]]
илиx$Sep11
или даже применить функцию к каждому элементу в списке.4. @MrFlick Назначение для вывода функции в именованном списке сработало, и я вижу, что использую его. Однако мой вопрос касался назначения в глобальной среде, поэтому я оставлю akrun в качестве принятого ответа. Выделите это как отдельный ответ, чтобы другие люди могли его найти? Предполагая, что ТАК ответы будут весить больше комментариев.
Ответ №1:
Мы можем использовать assign
assign(format(Sys.Date(), "%b%d"), mtcars)
head(Sep11)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Комментарии:
1. Спасибо! Сначала я попытался назначить, но просто включил в него format() и получил ту же ошибку.