2015-08-07 7 views
5

Das Geschäft, für das ich arbeite, macht ELISA-Analyse die ganze Zeit (der Immunassay), und so programmiere ich eine Funktion, die eine csv-Formatversion der Maschinenauslesung für die optischen Dichten und führt eine statistische Regression als 4PL-Analyse bezeichnet. Es ist im Wesentlichen eine 4pl für Dummies-Funktion, die das DRC-Paket verwendet. Ich habe den Großteil des Codes geschrieben, aber jetzt versuche ich es tatsächlich in ein Funktionsformat zu setzen (es läuft gut außerhalb der Funktionsstruktur).Benutzer-Funktion, Formularobjekte definiert, aber nicht durch Code gefunden

Hier ist mein Problem. Ich bin die Definition der Formalen() meiner Funktion wie so:

elisa<-function(file="data.csv",wd="~/Desktop",standards=c(1,2),orient=horizontal, 
limit=TRUE,graph.4pl=FALSE,Conc.graph=FALSE){ body of function} 

Es ist nicht besonders wichtig, was die anderen Formalen im Moment, aber ich laufe in zwei Probleme. Hier ist der Code für den ersten Teil des Blocks.

Wenn die Gemeinschaft in ihrer Weisheit denkt, dass ich mehr einschließen muss, werde ich, aber lassen wir es jetzt für jetzt lassen.

Das Problem:

elisa("Mock data.csv") 
Error in setwd(wd[1]) : object 'wd' not found 

Dieser Fehler erscheint. Wie Sie aber sehen können, ist wd

definiert
formals(elisa) 
$file 
[1] "data.csv" 

$wd 
[1] "~/Desktop" 

$standards 
c(1, 2) 

$orient 
horizontal 

$limit 
[1] TRUE 

$graph.4pl 
[1] FALSE 

$Conc.graph 
[1] FALSE 

Außerdem, wenn ich wd als "~/Desktop" im globalen Umfeld vordefinieren, geht der Fehler für wd weg, aber ich bekomme diese

wd<-"~/Desktop" 
elisa("Mock data.csv") 
Error in read.table(file = file, header = header, sep = sep, quote = quote, : 
'file' must be a character string or connection 

Entweder ich bin Ich überlege völlig, wie ich meine Formals definieren kann, oder ich stoße auf ein sehr merkwürdiges Argument, bei dem es Probleme gibt. Irgendwelche Ideen?

+0

Warum den Pfad nicht in das Argument 'file' aufnehmen? Außerdem bezweifle ich, dass es ein Problem ist, das Sie sehen, aber muss "horizontal" eine Zeichenkette sein? –

+0

Sie haben Recht. Sobald ich das Hauptproblem gelöst hatte, wurde horizontal als Objekt und nicht als String behandelt. Der nächste Fehler wurde identifiziert :) – Eich

Antwort

6

Das Problem ist, dass Sie alle Ihre Formulare mit der ersten Zeile löschen, rm(list=ls()).

Zum Beispiel:

f <- function(a=1) { 
    rm(list=ls()) 
    print(a) 
} 
f() 
## Error in print(a) : object 'a' not found 

Wenn Sie wd im globalen Umfeld (dh in dem Stapel über Ihrer Funktion) definieren Sie Ihre Funktion funktioniert (zumindest bis zu diesem Zeitpunkt), weil rm(list=ls()) nur die Variablen löschen in Ihrer aktuellen Umgebung (dh der Funktionsaufruf). In diesem Fall verwendet Ihre Funktion Werte für Variablen, die in der globalen Umgebung definiert sind.

+0

Omg, ich bin ein Idiot. Ich hatte das im Code, als ich schnell zum Debugging überging, wenn es keine Funktion war, und ich vergaß es zu zerren, als ich alles zusammenfasste. Ich konzentrierte mich so sehr darauf, dass es wahrscheinlich eine direkte Ursache zwischen den Formalen und dem Befehl setwd gab, den ich völlig vergessen hatte, auf Interferenzen von anderen Linien zu prüfen. Bitte entschuldige meine Kampfblindheit. Das ist nur peinlich. Danke, dass Sie meine zweite Augen sind. – Eich