Hier ist das, was
for (i in range(dim(I.df.nocov)[2]))
aus Gründen des Beispiels in
passiert, gehe ich davon aus, dass
I.df.nocov
100 Zeilen und 5 Spalten enthält.
dim(I.df.nocov)
der Vektor der I.df.nocov
Dimensionen, das heißt c (100, 5)
dim(I.df.nocov)[2]
ist der 2. Dimension I.df.nocov
, dh 5
range(x)
ein Vektor 2-Element ist, das minimale und maximale Werte enthält von x. Zum Beispiel ist der Bereich (c (4,10,1)) c (1,10). Also range(dim(I.df.nocov)[2])
ist c (5,5).
Daher iteriert die Schleife zweimal: das erste Mal mit i = 5, und das zweite Mal auch mit i = 5. Nicht überraschend, dass es fehlschlägt!
Das Problem ist, dass R-Funktion range
und Python-Funktion mit dem gleichen Namen ganz andere Dinge tun. Das Äquivalent von Pythons range
heißt seq
. Zum Beispiel seq(5)=c(1,2,3,4,5)
, während seq(3,5)=c(3,4,5)
und seq(1,10,2)=c(1,3,5,7,9)
. Sie können auch schreiben 1:n
, es ist die gleiche wie seq(n)
ist, und m:n
ist die gleiche wie seq(m,n)
(aber die Priorität ‚:‘ ist sehr hoch, so 1:2*x
als (1:2)*x
interpretiert
Im Allgemeinen, wenn etwas nicht in funktioniert. R, Sie sollten die Teilausdrücke von innerwise nach outwardwise drucken.Wenn ein Teilausdruck zu groß ist, um gedruckt zu werden, verwenden Sie str (x) (str bedeutet "Struktur"). Und nehmen Sie nie an, dass Funktionen in Python und R gleich sind! Es gibt eine Funktion mit dem gleichen Namen, es macht normalerweise eine andere Sache.
Auf eine Randnotiz, anstelle von dim(I.df.nocov)[2]
könnten Sie einfach ncol(I.df.nocov)
schreiben (es gibt auch eine Funktion nrow
).
Warum verwenden Sie Bereich, um Ihren Schleifenindex zu generieren? Verwenden Sie stattdessen 'i in seq_along (I.df.nocov)'. – Alex