Назначение переменной в цикле for
40905 просмотра
1 ответ
Возможный Дубликат:
R: Как преобразовать строку в имя переменной?
В R я пишу цикл for, который будет итеративно создавать имена переменных, а затем присваивать значения каждой переменной.
Вот упрощенная версия. Намерение состоит в том, чтобы создать имя переменной на основе значения итерационной переменной i, а затем заполнить новую переменную значениями NA.
(Я только повторяю 1: 1 ниже, так как проблема возникает не в самом цикле, а в том, как переменная создается и присваивается.)
for (i in 1:1) {
#name variable i "Variablei"
varName = paste("Variable", as.character(i), sep="")
#fill variable with NA values
varName = rep(NA, 12)
print(varName)
print(Variable1)
}
Теперь varName распечатывается как
[1] NA NA NA NA NA NA NA NA NA NA NA NA
и переменная1 не найдена.
Я понимаю на каком-то уровне, почему это глючит. В первой строке varName становится вектором, единственной записью которого является строка «Variable1». Затем varName переназначается для хранения значений NA. Поэтому, когда я пытаюсь напечатать Variable1, его не существует.
Я думаю, что более общая проблема - это назначение или равенство. В первой строке я хочу, чтобы varName было равно вновь созданной строке, но в следующей строке я хочу, чтобы varName был назначен вектору значений NA.
Какой самый простой способ создать это различие? Я также открыт для совершенно других, лучших способов сделать это.
РЕДАКТИРОВАТЬ: изменил название, потому что я неправильно охарактеризовал проблему.
Автор: half-pass Источник Размещён: 12.11.2019 09:47Ответы (1)
12 плюса
Назначение работает так:
<varname> = <expression>
или более традиционно
<varname> <- <expression>
Таким образом, в вашем коде вы только когда-либо назначены varName
. Речь идет не о назначении против равенства, а о назначении. Вы можете посмотреть на assign
:
for (i in 1:5) {
assign(paste0("Variable", i), 10*i)
}
как игрушечный пример.
Более того, как отмечается в комментариях, вероятно, есть более подходящие подходы для вашего приложения. Например, почему бы не просто использовать вектор myvector
и вместо того , чтобы переменные называются Variable1
, Variable2
и т.д. Вы можете обратиться к myvector[1]
, и myvector[2]
т.д.
В качестве примера, скажем, вы планировали работать с
Variable1 <- 'foo'
Variable2 <- 'bar'
Variable3 <- 'baz'
Затем вы можете изменить свой подход и установить
mydata <- c('foo', 'bar', 'baz')
и где вы ранее использовали Variable2
(что содержит 'bar'
) вы используете вместо mydata[2]
(который также содержит 'bar'
). Дело в том, что работать с векторами и фреймами данных в R намного проще, чем с длинным списком переменных.
Вы можете пойти дальше и назвать записи:
names(mydata) <- paste0("V", 1:3)
который затем позволяет писать mydata["V2"]
для извлечения bar
.
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- variable-assignment Разрушающее присваивание в JavaScript
- variable-assignment Zend Studio сообщает предупреждение: назначение в состоянии. Это так плохо?
- variable-assignment Как назначить переменную в IF, а затем вернуть ее?
- variable-assignment Многократное левостороннее назначение с JavaScript
- variable-assignment Как назначить из функции, которая возвращает более одного значения?
- variable-assignment Linux bash: назначение нескольких переменных
- variable-assignment JavaScript ИЛИ (||) объяснение назначения переменной
- variable-assignment Ошибка команды при назначении переменной Bash
- variable-assignment Присвоить вывод программы переменной с помощью командного файла MS
- variable-assignment Java: определение условий инициализации, объявления и назначения