58 votes

Quel est le plus grand R-Gotcha que vous avez rencontré?

Y a-t-il un certain R-Gotcha qui vous a vraiment surpris un jour? Je pense que nous aurions tous intérêt à partager ces informations.

Voici le mien: dans l'indexation de liste, my.list [[1]] n'est pas my.list [1]. J'ai appris cela au tout début de R.

43voto

Shane Points 40885

[Hadley a souligné dans un commentaire.]

Lors de l'utilisation d'une séquence comme un indice de l'itération, il est préférable d'utiliser l' seq_along() de la fonction plutôt que quelque chose comme 1:length(x).

Ici, j'ai créer un vecteur et les deux approches de retour la même chose:

> x <- 1:10
> 1:length(x)
 [1]  1  2  3  4  5  6  7  8  9 10
> seq_along(x)
 [1]  1  2  3  4  5  6  7  8  9 10

Maintenant, faire le vecteur NULL:

> x <- NULL
> seq_along(x) # returns an empty integer; good behavior
integer(0)
> 1:length(x) # wraps around and returns a sequence; this is bad
[1] 1 0

Cela peut entraîner une certaine confusion dans une boucle:

> for(i in 1:length(x)) print(i)
[1] 1
[1] 0
> for(i in seq_along(x)) print(i)
>

36voto

edward Points 800

La création automatique de facteurs lorsque vous chargez des données. Vous traitez inconsciemment une colonne dans un bloc de données comme des caractères et cela fonctionne bien jusqu'à ce que vous fassiez quelque chose comme essayer de changer une valeur en une autre valeur. Cela générera un avertissement mais laissera votre bloc de données avec des NA dans celui-ci ...

Lorsque quelque chose ne va pas de façon inattendue dans votre script R, vérifiez que les facteurs ne sont pas à blâmer.

32voto

Dirk Eddelbuettel Points 134700

Oublier l'argument drop = FALSE dans les matrices de sous-définition vers une seule dimension et, par conséquent, supprimer également la classe d'objet:

 R> X <- matrix(1:4,2)
R> X
     [,1] [,2]
[1,]    1    3
[2,]    2    4
R> class(X)
[1] "matrix"
R> X[,1]
[1] 1 2
R> class(X[,1])
[1] "integer"
R> X[,1, drop=FALSE]
     [,1]
[1,]    1
[2,]    2
R> class(X[,1, drop=FALSE])
[1] "matrix"
R>
 

32voto

Ian Fellows Points 8013
> a<-data.frame(c(1,2,3,4),c(4,3,2,1))
> a<-a[-3,]
> a
  c.1..2..3..4. c.4..3..2..1.
1             1             4
2             2             3
4             4             1
> a[4,1]<-1
> a
Error in data.frame(c.1..2..3..4. = c("1", "2", "4", "1"), c.4..3..2..1. = c(" 4",  : 
  duplicate row.names: 4

25voto

John Points 11714

Tout d'abord, permettez-moi de dire que je comprends les problèmes fondamentaux de représenter les nombres dans un système binaire. Néanmoins, un problème qui je pense pourrait être facilement améliorée est la représentation des nombres lorsque la valeur décimale est au-delà de la R typiques de la portée de la présentation.

x <- 10.2 * 100
x
1020
as.integer(x)
1019

Je n'ai pas l'esprit si le résultat est représenté par un nombre entier quand il ne peut vraiment être représenté par un nombre entier. Par exemple, si la valeur était vraiment 1020 puis l'impression que, pour x ce serait bien. Mais quelque chose d'aussi simple que de 1020.0 dans ce cas, lors de l'impression x aurait rendu plus évident que la valeur n'était pas un entier et non représentable comme une. R par défaut pour certains types d'indication quand il y a une très petite virgule composant qui n'est pas présenté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X