Можно ли на лету создавать новые имена переменных?
Я хотел бы читать фреймы данных из списка в новые переменные с числами в конце. Что-то вроде orca1, orca2, orca3 ...
Если я попробую что-то вроде
paste("orca",i,sep="")=list_name[[i]]
Я получаю эту ошибку
target of assignment expands to non-language object
Есть ли другой способ обойти это?
Ответы:
Использование
assign
:источник
paste0
?Мне кажется , что вы могли бы быть лучше со списком , а не использовать
orca1
,orca2
и т.д., ... то это было быorca[1]
,orca[2]
...Обычно вы составляете список переменных, различаемых только числом, потому что это число будет удобным способом доступа к ним позже.
В противном случае
assign
это именно то, что вам нужно.источник
Не создавайте фреймы данных. Сохраните список, назовите его элементы, но не прикрепляйте его.
Самая большая причина этого в том, что если вы создаете переменные на ходу, почти всегда позже вам придется перебирать каждую из них, чтобы выполнить что-то полезное. Здесь вам снова придется перебирать каждое из имен, которые вы создали на лету.
Намного проще назвать элементы списка и перебирать имена.
Что касается attach, это действительно плохая практика программирования в R и может привести к большим проблемам, если вы не будете осторожны.
источник
FAQ говорит:
Если у вас есть
ты можешь сделать
для
или
для
Похоже, вы используете GET, когда хотите оценить формулу, которая использует переменную (например, конкатенацию), и ASSIGN, когда хотите присвоить значение предварительно объявленной переменной.
Синтаксис для assign: assign (x, value)
Икс: имя переменной в виде символьной строки. Принуждение не выполняется, и будет использован первый элемент вектора символов длиной больше единицы с предупреждением.
значение: значение, которое будет присвоено x.
источник
Еще одно хитрое решение - назвать элементы списка, а
attach
он:источник
attach
что вы обычно задаете неправильный вопрос ...А этот вариант?
Работает отлично. В приведенном вами примере первая строка отсутствует, а затем выдается сообщение об ошибке.
источник