2016-11-26 3 views
1

Ich versuche ein Skript zu erstellen, das ich ungefähr einmal pro Woche ausführen werde. Das Ziel ist, dass es ausgeht und eine MS Excel-Datei überprüft, die ein Kollege verwaltet. Es prüft dann, ob das Datum, an dem die Datei geändert wurde, neuer ist als das Datum, zu dem es zuletzt importiert wurde. Wenn es neuer ist, wird die Datei (ich benutze readxl package - WONDERFUL!) In ein neues Objekt importiert, das mit dem Datum benannt ist, an dem die ursprüngliche Excel-Datei zuletzt geändert wurde und im Objektnamen enthalten ist. Ich habe alles außer der Zuordnung des importierten data.frame zu einem neuen Objekt, das das Datum enthält.Importieren einer Datei nur, wenn sie seit dem letzten Import geändert wurde und dann in einem neuen Objekt gespeichert wird

Ein Beispiel für den Code, den ich verwende, ist:

Zuerst habe ich ein Objekt mit einem Pfad erstellen, um die Datei von Interesse zeigt.

pfdFilePath <- file.path("H:", "3700", "3780", "002-00", "3. 
    Project Information", "Program", "RAH program.xls") 

nach dem Test die Datei zu überprüfen, wurde geändert, ich einfache Zuweisung versucht haben („test“ ist nur ein Beispiel für die Vereinfachung):

paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = "") <- "test" 

Aber das Code erzeugt einen Fehler:

Error in paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = "") <- "test" : target of assignment expands to non-language object

ich versuche dann die assign Funktion:

assign(paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = ""), "test") 

Ausführen dieses Codes erzeugt ein Objekt, das in Ordnung sein aussieht, aber wenn ich es bewerten, oder versuchen str() oder Klasse() verwenden ich die folgende Fehlermeldung erhalten:

Error in df - df-2016-08-09 : non-numeric argument to binary operator

Ich bin ziemlich sicher, dass dies eine ist Fehler, der mit der Umgebung zu tun hat, die ich verwende, aber ich bin relativ neu in R, ich kann es nicht herausfinden. Ich verstehe, dass die Zuweisungsfunktion verpönt ist, aber diese Warnungen scheinen sich auf For-Loops vs. Ich wiederhole nicht wirklich innerhalb einer Funktion. Nur ein dynamisch benanntes Objekt, wenn ich ein Skript ausführe. Ich kann mir keinen besseren Weg dafür ausdenken. Wenn es eine andere Möglichkeit gibt, dies zu tun, die die Zuweisungsfunktion nicht erfordert, oder eine bessere Art, Zuweisungsfunktion zu verwenden, würde ich es gerne wissen.

Vielen Dank im Voraus, und es tut uns leid, wenn dies ein Duplikat ist. Ich habe den ganzen Abend damit verbracht zu graben und kann nicht ableiten was ich brauche.

+0

Versuchen Sie 'zuweisen (einfügen (" df ", strftime (Datei.info (some_shell_file) $ mtime,"% Y% m% d "), sep =" _ ")," test ")'. Es ist nicht wirklich ein Fehler mit der Umgebung. Es ist eher ein Fehler mit Ihrem Variablennamen. Es enthält Strings und Zahlen, die voneinander subtrahiert werden: '" df "- 2016 - 08 - 09'. Das ist im Grunde das Thema. – Abdou

+0

Ich habe das nur überflogen, aber könnte ein Makefile eine Lösung für das sein, was Sie erreichen wollen? – Dason

+0

Vielen Dank für den Vorschlag. Ich kannte die Makefile-Lösung nicht. Ich habe es überprüft, aber wahrscheinlich mehr als ich brauche. –

Antwort

0

Abdou lieferte den Schlüssel.

Ich konvertierte auch auf die cleaner paste0-Funktion und löschte die Bindestriche, um Verwirrung zu vermeiden. Lektion gelernt.

Funktioniert perfekt.

Verwandte Themen