Задача:Использование локальных переменных
Как определить локальные переменные в пределах области в р-коде.
Пример:
В C++ следующего примера определяет область действия, а переменные, объявленные в пределах объема не определены в за пределами кода.
{
vector V1 = getVector(1);
vector V1(= getVector(2);
double P = inner_product(V1, V2);
print(P);
}
// the variable V1, V2, P are undefined here!
Примечание: Этот код предназначен только для иллюстрации идеи.
Эта практика имеет следующие преимущества:
- Поддержание глобального пространства имен в чистоте;
- упрощающий код;
- устранение неоднозначностей, особенно когда переменная повторно используется без инициализации.
В R, мне кажется, что это понятие существует только внутри функций определения функций. Таким образом, для того, чтобы воспроизвести предыдущий пример кода, я должен был бы сделать что-то вроде этого:
dummy <- function() {
V1 = c(1,2,3);
V2 = c(1,2,3);
P = inner_product(V1, V2);
print(P);
}
dummy();
# the variable V1, V2, P are undefined here!
или, в еще более неясным образом, объявить анонимную функцию, чтобы предотвратить вызов функции:
(function() {
V1 = c(1,2,3);
V2 = c(1,2,3);
P = inner_product(V1, V2);
print(P);
})()
# the variable V1, V2, P are undefined here!
Вопрос
есть ли более элегантный способ для создания локальной переменной?
В пакетах по умолчанию, называемых inner_product, нет функции, но использование обычного вектора «*» должно дать вам это. Это: '(function() { V1 = c (1,2,3); V2 = c (1,2,3); P = V1 * V2; print (P); })() 'дает' # [1] 1 4 9'. Я не понимаю, почему это менее понятно или просто, чем версия на C++. Если ваш код вызывает ошибки, это происходит не из-за проблем с определением области видимости, а из-за того, что вы игнорируете сообщения об ошибках. Если это не то, что вы говорите с вашим восклицательным комментарием, то вам нужно объяснить дальше. –
было упомянуто, что код должен был просто проиллюстрировать вопрос, а не заниматься внутренним продуктом.Второй комментарий дает лучший ответ, который заключается в использовании «локальной» конструкции, такой как локальная ({c = c (1,2,3); d = c (2,3,4); e = c * d; print (e)}) – Daniel
Боюсь, я до сих пор не понимаю, что подразумевается под «переменными V1, V2, P здесь не определены!». –