web-dev-qa-db-fra.com

Pourquoi une trame de données vide échoue-t-elle à un test is.null ()?

veuillez m'excuser si ma question est assez basique. J'ai créé un bloc de données vide par df <- data.frame() et évidemment le bloc de données est NULL (vide). lorsque j'essaie de vérifier si la trame de données est vide par is.null(df), le résultat est FAUX. Y a-t-il une différence entre NULL et empty dans R. Dans ce cas, si le bloc de données n'est pas NULL, alors ce qu'il y a dans le bloc de données vide et quand il le sera NULL. Merci

22
Agaz Hussain

df n'est pas NULL car il s'agit d'un bloc de données et a donc des propriétés définies. Par exemple, il a une classe. Et vous pouvez obtenir le nombre de lignes dans le bloc de données en utilisant nrow(df), même si le résultat doit être nul. Par conséquent, le nombre de lignes est également bien défini.

Pour autant que je sache, il n'y a pas de commande is.empty Dans la base R. Ce que vous pourriez faire, par exemple, est le suivant

is.data.frame(df) && nrow(df)==0

Cela donnera TRUE pour une trame de données vide (c'est-à-dire une sans ligne) et false sinon.

La raison de la vérification de is.data.frame Est tout d'abord que nrow peut provoquer une erreur, s'il est appliqué à autre chose qu'un bloc de données. Grâce à &&, nrow(df) ne sera évaluée que si df est une trame de données.

39
Stibu

data.frame() crée un objet qui a une classe de trame de données . Parce que l'objet ( existe , is.null renverra [~ # ~] false [~ # ~] . Une variable NULL n'a pas de classe et pas de contenu.

0
ahmohamed