У меня проблема с использованием переменной в R Studio. Мой код выглядит следующим образом. «child_birth» — это вектор, состоящий из 49703 строк, который указывает некоторую информацию о рождении ребенка. Что я сделал здесь, так это сказал, являются ли последние 7 символов в каждом элементе вектора «домашними». Поэтому я использовал цикл for и оператор if. если "дома", то соответствующий элемент в векторе "GetValue" будет TRUE.
forloop <- (1:49703)
for (i in forloop){
temp <- child_birth[i]
if (substr(temp, nchar(temp)-6, nchar(temp)) == "at home" ) {
GetValue[i] = TRUE
}
else{ GetValue[i] = FALSE }
}
Я погуглил, чтобы убедиться, что в R мне не нужно делать предварительную декалацию перед использованием переменной. но когда я запустил приведенный выше код, я получил информацию об ошибке: «Ошибка: объект GetValue не найден». Так в чем проблема?
Спасибо!
GetValue[i]
имеет смысл, только если GetValue
(и i
) существуют. Сравните: x+i
имеет смысл только в том случае, если x
и i
существуют, что не имеет ничего общего с тем, должны ли x
и i
быть объявлены перед использованием.
В этом случае вам нужно определить GetValue
перед циклом. Я рекомендую
GetValue <- logical(length(child_birth))
чтобы выделить достаточно места. В этом случае вы можете полностью отказаться от предложения else
, поскольку логическое значение по умолчанию равно FALSE
.
Я также рекомендую удалить переменную forloop
и использовать
for(i in seq_along(child_birth))
Зачем жестко запрограммировать магический номер 49703? Такие номера могут быть изменены. Если вы помещаете их явно в код, вы настраиваете себя на будущие ошибки.
@kaiyuwei Вы не объявляете здесь GetValue
— вы создаете его по заданию. Конструкция цикла for создает переменную-счетчик i
. R ближе к Python, чем к C или Java. Это не компилируемый язык (поэтому понятие объявления было бы несколько немотивированным), но переменная все равно должна быть создана перед ее использованием. В GetValue <- logical(length(child_birth))
правая часть создает вектор. Присвоение этого вектора GetValue
— это то, что создает переменную.
Большое спасибо за ваше решение! но у меня все еще есть вопрос, нужно ли мне предварительно объявлять переменные? Например, в приведенном выше коде я не объявлял «i», но я могу использовать его в цикле for. Однако я не могу использовать «GetValue» без объявления. Я немного смущен сейчас.