2014-03-03 14 views
8

Ich möchte Daten aus verschiedenen Textdateien lesen, ähnlich wie Lazy Laden von Datensätzen (z. B. Eingabe iris in R lädt lässig die Daten aus dem datasets Paket). Der Unterschied hier ist, dass ich möchte, dass eine R expression ausgeführt wird, immer wenn eine Variable (hier verwende ich x) in die R-Konsole eingegeben wird oder durch einen anderen Code verwendet wird.Ein R-Versprechen-Objekt (Lazy Evaluation) von Grund auf neu

# The expression that I want run if the variable x is called by some other code 
expn = quote({x = read.table(text = "a b \n 1 2", header=TRUE)}) 

# When I type this, I want the language object 'expn' to be evaluated 
# (e.g. eval(expn)) so that the variable x now exists 
x 

Gibt es eine Möglichkeit, dies mit einem R-Versprechen-Objekt zu tun? Muss ich ein R-Paket erstellen, um dieses Verhalten zu erhalten?

Antwort

10

Sie suchen nach delayedAssign.

delayedAssign('x', read.table(text = "a b \n 1 2", header=TRUE)) 

können Sie sehen, dass der Ausdruck ausgeführt wird, wenn x zuerst angefordert wird:

delayedAssign('x', { 
     message('assigning') 
     read.table(text = "a b \n 1 2", header=TRUE) 
    }) 
x 
# assigning 
# a b 
# 1 1 2 
Verwandte Themen