Как присвоить значения динамическим именам переменных
42170 просмотра
2 ответа
Привет, я пытаюсь назвать переменные, используя цикл for, поэтому я получаю динамические имена для моих переменных.
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
Автор: nopeva
Источник
Размещён: 12.11.2019 09:50
Ответы (2)
23 плюса
использовать assign
как в:
x <- 1:10
for(i in seq_along(x)){
assign(paste('X', i, sep=''), x[i])
}
Автор: Jilber Urbina
Размещён: 29.12.2012 01:11
11 плюса
Это может быть хорошей идеей для использования, assign
когда имеется много переменных, и их часто ищут. Поиск в среде быстрее, чем в векторе или списке. Отдельная среда для объектов данных - хорошая идея.
Другая идея заключается в использовании hash
пакета. Он выполняет поиск так же быстро, как окружение, но более удобен в использовании.
datos <- rnorm(1:10)
library(hash)
h <- hash(paste("x", 1:10, sep=""), datos)
h[["x1"]]
Вот временное сравнение для 10000 переменных, которые ищутся 10 ^ 5 раз:
datos <- rnorm(1:10000)
lookup <- paste("x", sample.int(length(datos), 100000, replace=TRUE), sep="")
# method 1, takes 16s on my machine
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(for(key in lookup) datos[[key]])
# method 2, takes 1.6s on my machine
library(hash)
h <- hash(paste("x", seq_along(datos), sep=""), datos)
system.time(for(key in lookup) h[[key]])
# method 3, takes 0.2s on my machine
e <- new.env()
for(i in seq_along(datos)){
assign(paste('x', i, sep=''), datos[i], envir=e)
}
system.time(for(key in lookup) e[[key]])
Однако векторизованная версия метода 1 является самой быстрой, но не всегда применимой
# method 4, takes 0.02s
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(datos[lookup])
Автор: Karsten W.
Размещён: 29.12.2012 01:28
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- r Разница между скобками [] и двойной скобкой [[]] для доступа к элементам списка или кадра данных
- r Написание функций на R с учетом объема работ
- r Линейная регрессия и группировка по R
- r Как заставить выполнение приостановить, поспать, подождать X секунд в R?
- r Уровни коэффициента отбрасывания в заданном кадре данных
- r Графики рядом с ggplot2
- r Как отсортировать фрейм данных по нескольким столбцам
- r Как объединить (объединить) кадры данных (внутренний, внешний, левый, правый)?
- r Поворотные и интервальные метки на оси ggplot2
- r Как избежать цикла в R: выбор элементов из списка