2017-10-31 2 views
0

Ich habe diese diff_rc Matrix:R ColProds und mindestens einer Spalte einer Matrix

diff_rc

 [,1]   [,2]   [,3] 
[1,] 1 0.043131541 0.079957068 
[2,] 2 0.079957068 0.074712332 
[3,] 3 0.074712332 0.041978947 
[4,] 4 0.041978947 -0.003661470 
[5,] 5 -0.003661470 -0.047627302 
[6,] 6 -0.047627302 -0.077841351 
[7,] 7 -0.077841351 -0.092244072 
[8,] 8 -0.092244072 -0.091280341 
[9,] 9 -0.091280341 -0.075395031 
[10,] 10 -0.075395031 -0.045033013 
[11,] 11 -0.045033013 -0.003151946 
[12,] 12 -0.003151946 0.037239385 
[13,] 13 0.037239385 0.060619410 
[14,] 14 0.060619410 0.051466559 
[15,] 15 0.051466559 -0.005740738 

ich diesen Code erstellt haben, um die Änderung der Zeichen fro die raws zur Überprüfung.

x_loc <- red_curve$x[diff_rc[which(rowProds(diff_rc[, 2:3]) < 0), 1]] #return index "index" 
y_loc <- red_curve$y[diff_rc[which(rowProds(diff_rc[, 2:3]) < 0), 1]] 

Dies sind die Ergebnisse

[1] 4 12 15 
> y_loc 
[1] 0.041978947 -0.003151946 0.051466559 
> diff_rc 

1- Mein Problem ist, dass ich die Vorzeichenwechsel in der Spalte überprüfen möchte, wo [2]. Zum Beispiel ändert sich das Vorzeichen von 4 zu 5 und von 12 zu 13. Es ging von + ve nach -ve oder umgekehrt. nur in der zweiten Spalte. Ich diesen Code versucht, funktioniert aber nicht für die Matrix

> colProds(diff_rc[,2]) 
Error in double(length = n) : invalid 'length' argument 
In addition: Warning message: 
Argument 'x' is of class ‘numeric’, but should be a matrix. The use of a ‘numeric’ is not supported, the correctness of the result is not guaranteed, and will be defunct (produce an error) in a future version of matrixStats. Please update your code according 

2- Nach der Änderung des Zeichens überprüft, ich brauche den Minimalwert der beiden Elemente zurückzukehren. eg (-,003661470) sollte der zurückgegebene Wert von Spalte 4 und 5

+0

Sie müssen sicherstellen, fallen Sie nicht die Matrix Dimensionen ersetzen, dh verwenden 'colProds (diff_rc [ , 2, drop = FALSE]) '. – HenrikB

+0

> numerisch (0) Gibt es eine Möglichkeit, erste und letzte Indizes zu ignorieren? – user91

Antwort

0

a mit diff_rc[,2]

a <- runif(10, -10, 10) 

ind <- which(sign(a) != lag(sign(a))) 

pairs <- sapply(ind, function(x) a[c(x, x - 1)]) 

rbind(index = ind, min.val = apply(pairs, 2, min), pairs) 
#    [,1]  [,2]  [,3]  [,4]  [,5] 
# index 2.0000000 4.000000 5.000000 9.000000 10.000000 
# min.val -3.8646299 -1.461847 -8.297281 -4.553899 -1.406569 
#   -3.8646299 3.862042 -8.297281 2.316586 -1.406569 
#   0.1495641 -1.461847 3.862042 -4.553899 2.316586 
+0

Das ist was ich bekomme. Ich ersetzte runif (10, -10,10) mit diff_rc [, 2] > ind integer (0) > Paare list() – user91

+0

Ich denke, ich dachte nicht, dass diese Methode einen Vektor erwartet, nicht ein Datenrahmen. Du kannst 'a <- unlist (diff_rc [, 2])' machen. – Renu

+0

selbe zusätzlich: Fehler in der Anwendung (Paare, 2, min): dim (X) muss eine positive Länge haben. Was passiert, wenn ich colProds benutze und den ersten und letzten Raw auf der Liste ignoriere? Gibt es eine Möglichkeit, das zu tun? – user91

Verwandte Themen