2013-02-10 6 views
9

Задача:Использование локальных переменных

Как определить локальные переменные в пределах области в р-коде.

Пример:

В 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! 

Вопрос

есть ли более элегантный способ для создания локальной переменной?

+0

В пакетах по умолчанию, называемых inner_product, нет функции, но использование обычного вектора «*» должно дать вам это. Это: '(function() { V1 = c (1,2,3); V2 = c (1,2,3); P = V1 * V2; print (P); })() 'дает' # [1] 1 4 9'. Я не понимаю, почему это менее понятно или просто, чем версия на C++. Если ваш код вызывает ошибки, это происходит не из-за проблем с определением области видимости, а из-за того, что вы игнорируете сообщения об ошибках. Если это не то, что вы говорите с вашим восклицательным комментарием, то вам нужно объяснить дальше. –

+0

было упомянуто, что код должен был просто проиллюстрировать вопрос, а не заниматься внутренним продуктом.Второй комментарий дает лучший ответ, который заключается в использовании «локальной» конструкции, такой как локальная ({c = c (1,2,3); d = c (2,3,4); e = c * d; print (e)}) – Daniel

+0

Боюсь, я до сих пор не понимаю, что подразумевается под «переменными V1, V2, P здесь не определены!». –

ответ

1

Вы можете создать новый environment, где может быть определена ваша переменная; так определяется локальная область внутри функции.

Вы можете прочитать больше об этой проверке here

помощь для environment, а то есть тип вашей консоли R ?environment

12

Использование local. Использование вашего примера:

local({ 
    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! 
Смежные вопросы