2017-07-10 2 views
0
neu erstellt wurde

Ich verwende das Memoise-Paket, um Funktionsaufrufe in einem R-Paket zu cachen, das ich gerade entwickle. Während der Entwicklung baue ich regelmäßig mein Paket um. Aber jedes Mal sind die zwischengespeicherten Funktionsaufrufe vergessen. Irgendwelche Vorschläge, wie diese Funktionsaufrufe zwischengespeichert werden? Vorzugsweise mit dem Memoise-Paket. Wenn es nicht möglich ist, wird ein alternativer Vorschlag geschätzt.Wie eine Memoise-Cache-Funktion zwischengespeichert wird, nachdem das Paket in R

von Grund auf neu zu reproduzieren, dies zu tun:

Teil 1 - Paket erstellen

auf der interaktiven R-Konsole, ein Paket namens "TmpTestPackage1". (Dies wird ein Verzeichnis mit dem Namen "TmpTestPackage1" in Ihrem aktuellen Arbeitsverzeichnis erstellen):

> library("devtools") 
> create("TmpTestPackage1") 

Erstellen Sie die Datei ./TmpTestPackage1/R/SomeCode.R und fügen Sie Inhalt:

library("memoise") 

longFunction = function() { 
    Sys.sleep(5) 
    return(7) 
} 

cachedLongFunction = memoise::memoise(longFunction) 

someOtherFunction = function() {  
    return(cachedLongFunction()) 
} 

Und jetzt auf eine R-Konsole (aus dem übergeordneten Verzeichnis des TmpTestPackage1 Verzeichnisses, mit devtools noch vorhanden):

> library("devtools") 
> install("TmpTestPackage1") 

TEIL 2 - Reproduzieren meines Problems

> library("TmpTestPackage1") 
> someOtherFunction() # This waits for 5 seconds as expected 
> someOtherFunction() # Now completes almost immediately because 
         # the function call is cached. Good. 
> install("TmpTestPackage1") 
> someOtherFunction() # This waits 5 seconds again! I want it to 
         # still be cached however. 

Antwort

1

Standardmäßig ist der Cache im Speicher, die im Paket Wiederaufbau gelöscht zu erhalten, da R-Sitzung neu gestartet wurde.

Sie können den Dateisystem-Cache in memoise verwenden, zum Beispiel den Cache im Ordner inst.

Verwandte Themen