Как назвать переменные «на лету»?

Можно ли создавать новые имена переменных «на лету»?

Я хотел бы прочитать кадры данных из списка в новые переменные с числами в конце. Что-то вроде orca1, orca2, orca3 …

Если я попробую что-то вроде

paste("orca",i,sep="")=list_name[[i]] 

Я получаю эту ошибку

 target of assignment expands to non-language object 

Есть ли другой способ?

Использовать assign :

 assign(paste("orca", i, sep = ""), list_name[[i]]) 

Мне кажется, что вам может быть лучше со списком, а не с помощью orca1 , orca2 и т. Д. … тогда это будет orca[1] , orca[2] , …

Обычно вы делаете список переменных, дифференцированных ничем, кроме числа, потому что это число будет удобным способом доступа к ним позже.

 orca <- list() orca[1] <- "Hi" orca[2] <- 59 

В противном случае assign - это именно то, что вы хотите.

Не создавайте кадры данных. Сохраните список, назовите его элементы, но не присоедините его.

Самая большая причина этого заключается в том, что если вы делаете переменные на ходу, почти всегда вам придется перебирать каждую из них, чтобы выполнить что-то полезное. Там вам снова придется перебирать каждое из имен, которые вы создали на лету.

Гораздо проще назвать элементы списка и перебрать имена.

Что касается приложения, то это очень плохая практика программирования в R и может привести к большим проблемам, если вы не будете осторожны.

Другое сложное решение – назвать элементы списка и attach его:

 list_name = list( head(iris), head(swiss), head(airquality) ) names(list_name) <- paste("orca", seq_along(list_name), sep="") attach(list_name) orca1 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species # 1 5.1 3.5 1.4 0.2 setosa # 2 4.9 3.0 1.4 0.2 setosa # 3 4.7 3.2 1.3 0.2 setosa # 4 4.6 3.1 1.5 0.2 setosa # 5 5.0 3.6 1.4 0.2 setosa # 6 5.4 3.9 1.7 0.4 setosa 

Часто задаваемые вопросы:

Если у вас есть

 varname <- c("a", "b", "d") 

ты можешь сделать

 get(varname[1]) + 2 

для

 a + 2 

или

 assign(varname[1], 2 + 2) 

для

 a <- 2 + 2 

Таким образом, похоже, что вы используете GET, когда хотите оценить формулу, в которой используется переменная (например, конкатенация), и ASSIGN, когда вы хотите присвоить значение предварительно объявленной переменной.

Синтаксис для assign: assign (x, value)

x: имя переменной, заданное как строка символов. Никакое принуждение не выполняется, и первый элемент символьного вектора длиной больше единицы будет использоваться с предупреждением.

value: значение, которое должно быть присвоено x.

И этот вариант?

 list_name<-list() for(i in 1:100){ paste("orca",i,sep="")->list_name[[i]] } 

Он работает отлично. В приведенном примере первая строка отсутствует, а затем появляется сообщение об ошибке.

  • Предупреждающее сообщение: В `...`: недопустимый факторный уровень, сгенерированный NA
  • Вставка двух векторов с комбинациями всех элементов векторов
  • Участок с осью 2 y, одна ось y слева и другая ось y справа
  • Как удалить все пробелы из строки?
  • Совокупность / суммирование нескольких переменных для каждой группы (например, сумма, среднее значение)
  • Преобразование эпохи UNIX в объект Date
  • Подсчитайте количество наблюдений / строк на группу и добавьте результат в кадр данных
  • Как вызвать объект с символьной переменной с тем же именем
  • Общие рекомендации по отладке в R
  • Ошибка в if / while (условие) {: аргумент имеет длину 0
  • Разделить строку строки фрейма данных на несколько столбцов
  • Давайте будем гением компьютера.