2013-02-10 13 views
9

Problem:Verwendung von lokalen Variablen

Wie lokale Variablen innerhalb eines Bereichs in einem r-Code zu definieren.

Beispiel:

In C++ Das folgende Beispiel definiert einen Umfang, und die Variablen innerhalb des Bereichs sind in außerhalb Code undefinierte erklärt.

{ 
    vector V1 = getVector(1); 
    vector V1(= getVector(2); 
    double P = inner_product(V1, V2); 
    print(P); 
} 
// the variable V1, V2, P are undefined here! 

Hinweis: Dieser Code ist nur die Idee zu illustrieren.

Diese Praxis hat die Vorteile:

  • Halten Sie den globalen Namensraum sauber;
  • vereinfachender Code;
  • Entfernen von Mehrdeutigkeiten, besonders wenn eine Variable ohne Initialisierung wiederverwendet wird.

In R scheint es mir, dass dieser Begriff nur innerhalb der Funktionsdefinitionen existiert. Also, um das vorherige Beispiel-Code zu reproduzieren, würde ich brauchen so etwas wie dies zu tun:

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! 

oder in einer noch obskurer Weise deklarieren eine anonyme Funktion den Funktionsaufruf zu verhindern:

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

Frage

gibt es eine elegantere Möglichkeit lokale Variable zu schaffen?

+0

Es gibt keine Funktion in den Standardpaketen mit dem Namen inner_product, aber mit gewöhnlichen Vektor "*" sollte Ihnen das geben. Dies ist: '(function() { V1 = c (1,2,3); V2 = c (1,2,3); P = V1 * V2; drucken (P); })() 'gibt' # [1] 1 4 9'. Ich verstehe nicht, warum das weniger klar oder einfach ist als die C++ - Version. Wenn Ihr Code Fehler verursacht, liegt das nicht an Problemen mit dem Umfang, sondern daran, dass Sie Fehlermeldungen ignorieren. Wenn das nicht das ist, was du mit deinem ausrufenden Kommentar sagst, dann musst du es weiter erklären. –

+0

es wurde erwähnt, dass der Code nur die Frage zu illustrieren, und nicht mit inneren Produkt zu beschäftigen.Der zweite Kommentar gibt eine bessere Antwort, die aus der Verwendung des "lokalen" Konstrukts wie local ({c = c (1,2,3); d = c (2,3,4); e = c *) besteht. d; print (e)}) – Daniel

+0

Ich fürchte immer noch nicht, was mit "Variablen V1, V2, P sind hier undefiniert" gemeint ist. –

Antwort

1

Sie können eine neue environment erstellen, in der Ihre Variable definiert werden kann; Auf diese Weise wird der lokale Bereich innerhalb einer Funktion definiert.

können Sie mehr über diesen here

Prüflesevorgang die Hilfe für environment als auch d Typen in Ihrer R Konsole ?environment

12

Verwendung local. Verwenden Sie Ihr Beispiel:

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! 
Verwandte Themen