Как назвать переменные «на лету»?
Можно ли создавать новые имена переменных «на лету»?
Я хотел бы прочитать кадры данных из списка в новые переменные с числами в конце. Что-то вроде orca1, orca2, orca3 …
Если я попробую что-то вроде
- Вставить несколько столбцов вместе
- Преобразование непрерывных числовых значений в дискретные категории, определенные интервалами
- Удалить обратную косую черту с символьной строки
- Заказать бары в гистограмме ggplot2
- завершение «+» в R
paste("orca",i,sep="")=list_name[[i]]
Я получаю эту ошибку
target of assignment expands to non-language object
Есть ли другой способ?
- Почему `` `` лучше, чем `подмножество`?
- Одновременно слияние нескольких кадров данных в списке
- Ошибка в if / while (условие) {: отсутствует Значение, в котором требуется TRUE / FALSE
- Что означает «Следующий объект замаскирован из« package: xxx »?
- Как написать trycatch в R
- Как преобразовать Блестящее приложение, состоящее из нескольких файлов, в легкоansible и воспроизводимый пример Shiny?
- Ускорьте работу цикла в R
- Как я могу использовать специальные символы, такие как \ ^ $.? * | + () [{В моем регулярном выражении?
Использовать 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]] }
Он работает отлично. В приведенном примере первая строка отсутствует, а затем появляется сообщение об ошибке.