2016-03-21 5 views
1

Ich möchte eine Funktion schreiben, die nur Vektoren der gleichen Größe und nur Matrizen der gleichen Größe akzeptiert, wie kann ich dies erreichen?Wie überprüft man, ob die Eingänge in R denselben Typ und dieselbe Größe haben?

Ich habe eine Funktion wie unten gezeigt, aber es wird eindeutig nicht so funktionieren, denn wenn ich gültige Vektoren habe, bekomme ich einen Fehler, dass sie keine gültigen Matrizen sind, und wenn sie gültige Matrizen sind umgekehrt. Aber wie gesagt, ich möchte nur überprüfen, ob sie Vektor oder Matrix sind, und ob sie von gleicher Größe sind, nur wenn sie denselben Typ und dieselbe Größe haben, möchte ich mit der Funktion fortfahren.

testFunc <- function(x, y) 
{ 
    if (!(is.vector(x) && is.vector(y) && is.numeric(x) && is.numeric(y) && length(x) == length(y))) 
    stop("Invalid input.") 
    if (!(is.matrix(x) && is.matrix(y) && is.numeric(x) && is.numeric(y) && dim(x) == dim(y))) 
    stop("Invalid input.") 

    # Rest of the function 
} 

Wie kann ich diese Überprüfungen durchführen, und dies auf möglichst präzise Art und Weise?

+0

Je nachdem, was genau wollen Sie das gleiche sein, können Sie möglicherweise unter unter Verwendung von 'is.vector (x einige der Vorschläge zu verkürzen,„numerisch“) 'und überspringt' is.numeric', wobei darauf zu achten ist, dass alle anderen Attribute als die Namen 'FALSE' zurückgeben. – joran

Antwort

0

Ihr Code ist ziemlich gut. Sie können ein wenig prägnant wie folgt tun:

if (!(is.numeric(x) && is.numeric(y) && 
     ((is.vector(x) && is.vector(y) && length(x) == length(y))|| 
     (is.matrix(x) && is.matrix(y) && dim(x) == dim(y))))) 
stop("Invalid input.") 
+0

Ja, das habe ich vermisst. Vielen Dank. –

Verwandte Themen