Comment vérifier un data.frame pour tout non-fini
J'aimerais vérifier si un ensemble de données.cadre a tout non-éléments finis.
Cela semble pour l'évaluation de chaque colonne, retourner FALSE pour chacun (je devine ses évaluer les données.l'image comme une liste):
any( !is.finite( x ) )
Je ne comprends pas pourquoi il se comporte différemment de ce qui précède, mais il fonctionne très bien si juste vérifier pour les NAs:
any( !is.na( x ) )
J'aimerais que la solution soit aussi efficace que possible. Je me rends compte que je peux le faire...
any( !is.finite( as.matrix( x ) ) )
source d'informationauteur SFun28
Vous devez vous connecter pour publier un commentaire.
Si vous tapez
methods(is.na)
vous verrez qu'il a unedata.frame
méthode, ce qui explique probablement pourquoi il fonctionne de la même façon que vous attendez, oùis.finite
ne le fait pas. La solution habituelle serait à l'écrire vous-même, puisque c'est une seule ligne. Quelque chose comme ceci peut-être,Je suis en supposant que l'erreur que vous obtenez est la suivante:
Cette erreur est parce que le
is.infinite()
et lais.finite()
fonctions ne sont pas mis en œuvre une méthode pour les données.les cadres. Leis.na()
fonction a un données.cadre de la méthode.La façon de contourner cela est de
apply()
la fonction à chaque ligne, colonne, ou dans l'élément de données.cadre. Voici un exemple d'utilisationsapply()
pour appliquer lais.infinite()
fonction à chaque élément:Votre solution d'appeler
as.matrix
ne fonctionnera que si ladata.frame
a seulement colonnes numériques. Sinon, la matrice va généralement de devenir un personnage de la matrice et le résultat sera faux partout...@joran a une bonne approche, mais vous aurez des problèmes avec le facteur de colonnes, à moins d'ajouter une méthode pour les facteurs de trop etc...
Aussi, si vous voulez le vérifier pour être aussi rapide que possible, vous devriez éviter de
sapply
et aller pourvapply
à la place.