“Incorrect le nombre de dimensions d'erreur”, m'aider à comprendre pourquoi

Organisation de cette question:

I.   Background
II.  The Problem/Question
III. Steps Taken to Make this Question Good
IV.  Update: the output of head(x.path) and dput(x.path)

I. Contexte

Je suis la personnalisation ou l'adaptation de l'e-mail le code de classification à partir d'O'Reilly livre "l'Apprentissage de la Machine pour les Pirates" (Chapitre 3). Le code et ses données associées peuvent être trouvés ici: https://github.com/johnmyleswhite/ML_for_Hackers/tree/master/03-Classification

II. Le Problème/Question

L'une des principales fonctions de ce code est appelé get.msg(). La fonction d'origine est

get.msg <- function(path)
{
  con <- file(path, open = "rt", encoding = "latin1")
  text <- readLines(con)
  # The message always begins after the first full line break
  msg <- text[seq(which(text == "")[1] + 1, length(text), 1)]
  close(con)
  return(paste(msg, collapse = "\n"))
}

Mes données sont différentes dans un certain nombre de façons, donc j'ai modifier un peu les choses. Mes données sont lues à partir plus tôt un relationnel, donc je n'ai pas à lire et nettoyer un fichier texte. Au lieu de cela, mon corps du message de données est la 18e colonne d'un dataframe, que nous pouvons appeler x. Voici ma version de get.msg():

get.msg <- function(path) {
  bodyvector <- path[!(is.na(path[,18]) | path[,18]==""), ]
  return(paste(bodyvector))
}

À l'origine, je me réfère à elle comme x$email et cela a fonctionné à travers la plupart du code, mais dans une étape ultérieure de la get.msg() fonction a été utilisée sur x.path, où x.path souligné x et a été utilisé dans une autre fonction en combinaison avec la paste() fonction, selon les auteurs de l'exemple de code:

 z.spam <- sapply(spam.docs, function(p) count.word(paste(x.path,p,sep = ""),         "keyword"))

Ici, le count.word() fonction est une fonction contenant get.msg(). Ainsi, la paste() fonction a été à l'origine des problèmes parce qu'il a causé x.path être considéré comme un atomique tableau apparemment, et a donné l'erreur que $ ne peut pas être utilisé avec un atomic tableau. Selon une ancienne StackOverflow Q&A, j'ai changé ma façon visée à la colonne de path[,18] (qui est évalué comme x.path[,18] et, par conséquent, est la même que x[,18]).

Puis j'ai fait quelques vérifications pour s'assurer que x.path[,18] avait les mêmes informations que x.path$email, ce qu'elle fit. Cependant, lorsque j'essaie d'exécuter le code que j'obtiens un message d'erreur sur get.msg(x.path), qui est:

Error in path[,18] : incorrect number of dimensions.

J'ai essayé path[,'email'], puis path[18,] et puis juste path par lui-même et tous les trois ont conduit à la même erreur. J'ai essayé path[[1]][[18]] et qui m'a donné un indice en dehors des limites d'erreur.

Toutes les pensées?

III. Les mesures Prises pour Faire de cette Question une Bonne

Pour éviter d'agacer quelqu'un et d'obtenir des votes, j'ai confirmé que le sujet est pertinent pour StackOverflow et je pense qu'il peut être utile à d'autres personnes s'occupant de ce ou de la programmation semblable à des problèmes dans le futur. J'ai aussi passé près d'une heure à la recherche de ce problème en ligne et d'essayer des choses dans R pour réparer.

Il y avait beaucoup de références à ce message d'erreur, cependant, la cause semblait être très diverses et complètement indépendants (tels que la mise en réseau de la difficulté, etc). Enfin, j'ai passé une quantité importante de temps sur le montage de cette question pour essayer de le rendre lisible et correctement mis en forme (j'espère que j'ai fait d'accord, je sais que c'est beaucoup d'informations).

IV. La sortie de head() et dput()

Certains d'entre vous très utile, les gens ont demandé à voir la sortie de head(x.path) ou dput(x.path). Je ne me dérange pas sauf que c'est une société confidentielle les données de messagerie et je vais être hors d'un travail et poursuivi en justice si je la publie. 😉

Je l'ai collé ici et a remplacé la vraie info avec des fausses infos. J'espère que c'est ok. J'ai essayé d'utiliser dput() au premier abord et je peux le faire si vous le souhaitez, mais c'était vraiment une quantité énorme de données. Voici head(x.path):

> head(x.path)
[1] "c(\"Z12e3317e4b1jZbbajZ9Zdd6\", \"Z12e3317e4b1jZbbajZ99124\", \"Z12e331Ze4b1jZbbajZ996dd\", \"Z12e3319e4b1jZbbajZ9acb6\", \"Z12e3319e4b1jZbbajZ9ad3b\", \"Z12e3319e4b1jZbbajZ9adjd\", \"Z12e3319e4b1jZbbajZ9aebZ\", \"Z12e3319e4b1jZbbajZ9aj23\", \"Z12e3319e4b1jZbbajZ9b22b\", \"Z12e3319e4b1jZbbajZ9b42a\", \"Z12e3319e4b1jZbbajZ9b49a\", \"Z12e331ae4b1jZbbajZ9bZ11\", \"Z12e331ae4b1jZbbajZ9bZZ4\", \"Z12e331ae4b1jZbbajZ9c237\", \"Z12e331ae4b1jZbbajZ9c2e4\", \"Z12e331ae4b1jZbbajZ9c3bZ\", \"Z12e331ae4b1jZbbajZ9c3cZ\", \"Z12e331ae4b1jZbbajZ9cZ31\", \n\"Z12e331be4b1jZbbajZ9cddd\", \"Z12e331be4b1jZbbajZ9cja6\", \"Z12e331ce4b1jZbbajZ9da1j\", \"Z12e331de4b1jZbbajZ9e649\", \"Z12e331de4b1jZbbajZ9j669\", \"Z12e331de4b1jZbbajZ9jZZZ\", \"Z12e331ee4b1jZbbajZ9j944\", \"Z12e331ee4b1jZbbajZ9jcZa\", \"Z12e331ee4b1jZbbajZ9jd4c\", \"Z12e331ee4b1jZbbajZa11e2\", \"Z12e331ee4b1jZbbajZa1291\", \"Z12e331ee4b1jZbbajZa1344\", \"Z12e3311e4b1jZbbajZa1j73\", \"Z12e3311e4b1jZbbajZa1131\", \"Z12e3311e4b1jZbbajZa11Z6\", \"Z12e3311e4b1jZbbajZa124c\", \"Z12e3311e4b1jZbbajZa1Zbc\", \"Z12e3311e4b1jZbbajZa19a9\", \n\"Z12e3311e4b1jZbbajZa1ac2\", \"Z12e3311e4b1jZbbajZa1b79\", \"Z12e3311e4b1jZbbajZa1db2\", \"Z12e3311e4b1jZbbajZa1ejb\", \"Z12e3312e4b1jZbbajZa2333\", \"Z12e3312e4b1jZbbajZa23aZ\", \"Z12e3312e4b1jZbbajZa24bb\", \"Z12e3312e4b1jZbbajZa2Z79\", \"Z12e3312e4b1jZbbajZa2Zea\", \"Z12e3312e4b1jZbbajZa2ba9\", \"Z12e3312e4b1jZbbajZa2cZa\", \"Z12e3313e4b1jZbbajZa3bc1\", \"Z12e3313e4b1jZbbajZa3ca9\", \"Z12e3313e4b1jZbbajZa3e71\", \"Z12e3ajbe4b1j66Zbcja4eZc\", \"Z12e3ajbe4b1j66Zbcja4ja4\", \"Z12e3c79e4b1j66ZbcjaZc36\", \"Z12e3e1ce4b1j66Zbcja64bd\", \n\"Z12e4117e4b1j66Zbcja6Zj1\", \"Z12e41bae4b1j66Zbcja734Z\", \"Z12e4226e4b1j66Zbcja7b13\", \"Z12e4226e4b1j66Zbcja7cbZ\", \"Z12e4ajee4b1j66Zbcjaa916\", \"Z12e4e61e4b1j66Zbcjab1c2\", \"Z12e4e61e4b1j66Zbcjab2da\", \"Z12eZ226e4b1j66ZbcjacZea\", \"Z12e6141e4b1j66Zbcjb19Z9\", \"Z12e6141e4b1j66Zbcjb19jd\", \"Z12e61Z9e4b1j66Zbcjb1acb\", \"Z12e61Z9e4b1j66Zbcjb1acj\", \"Z12j9713e4b1j66Zbcjc34db\", \"Z12j9713e4b1j66Zbcjc3ZZa\", \"Z12j9713e4b1j66Zbcjc3Za7\", \"Z12j9713e4b1j66Zbcjc3Zd2\", \"Z12j9713e4b1j66Zbcjc36c2\", \"Z12j973ce4b1j66Zbcjc396b\"\n)"
[2] "c(\"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \n\"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\", \"Something\")"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[3] "c(61Z7, 674Z, Z462, 692, Z26, 1121, 1213, 1317, 21ZZ, 2Z9Z, 2711, 3612, 3717, 4774, 4Z93, Z117, Z113, Z197, Z77Z, 61Z3, Z16Z, 11771, 12923, 13374, 13Z93, 14277, 1446Z, 1Z3ZZ, 1ZZ16, 1Z993, 164Z2, 16664, 1711Z, 171Z6, 1Z6ZZ, 1Z921, 19211, 193ZZ, 19931, 21117, 21164, 21177, 21371, 21Z61, 21673, 22ZZ7, 23137, 2ZZ44, 26166, 26Z1Z, 173Z6, 17661, 21Z74, 23119, 232ZZ, 249Z3, 2ZZ31, 261Z9, 31211, 33414, 336Z6, 37941, 1743, 1Z61, 216Z, 2171, 1ZZ3, 2119, 21Z4, 2129, 2334, 2ZZZ)"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[4] "c(\"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \n\"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\", \"Booty\")"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[5] "c(Z6, 93Z, 1314, 3, 4, Z, 6, 7, 9, 11, 11, 13, 14, 2Z, 26, 27, 2Z, 29, 33, 34, ZZ, Z3, 122, 12Z, 133, 139, 142, 147, 1Z2, 1Z3, 16Z, 169, 171, 171, 219, 221, 221, 222, 22Z, 226, 244, 246, 247, 24Z, 249, 2637, 264, 2Z9, 292, 296, 49, Z1, 76, 93, 9Z, 112, 111, 114, 1Z7, 211, 214, 263, 6, 7, 11, 11, 11, 11, 12, 13, 14, 1Z)"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[6] "c(3Z11, 3Z11, 3Z11, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, 691Z, Z664, Z664, Z664, Z664, Z664, Z664, Z664, Z664, Z664, Z664, Z664, Z664, 66Z1, 66Z1, 66Z1, 66Z1, 4ZZ4, 4ZZ4, 4ZZ4, 4ZZ4, 4ZZ4, 4ZZ4)"       

Si c'était pour vous montrer plus alors que vous auriez du voir le corps du message pour [18].

Il sera beaucoup plus facile si vous nous montrez votre objet (tête, str) et la ligne de code malveillant. Un exemple reproductible peut aller encore plus loin.
La pensée est path doit être un deux-dimension de l'objet (par exemple, data.frame ou matrix), de sorte que vous pouvez faire path[,18]; votre x.path ne l'est pas. Il suffit de ne class(x.path) et vous devriez voir ça.
Mise à jour: j'ai aussi essayé de remplacer [,18] avec [,'email'] mais j'ai reçu le même message. Je vois deux commentaires surgi alors que je suis en train de modifier ce alors laissez-moi à sauver mon confie alors je vais suivre le vôtre (et merci btw!). Je voudrais vous donner la sortie de la tête() mais c'est confidentiel des corps de message : /
flodel: Vous avez raison, la classe de(x.chemin d'accès) montre qu'il est de caractère du fait de la pâte() de commande, mais je n'ai utilisé qu'en raison de la auteurs de l'exemple et parce que je ne peux pas comprendre comment obtenir loin de tout en utilisant la fonction anonyme comme dans ce troisième extrait de code dans mon premier post. Est-il une manière que je pourrais le faire sans coller tho? Désolé pour la question stupide.
Romain: j'ai peut cependant décrire la sortie de la tête(x.chemin d'accès). C'est un grand dataframe avec différents types de données stockées relatives à un client de messagerie. La seule colonne je me soucie pour le moment est le corps de l'email de la colonne et que l'on est juste le texte des e-mails, avec \r et \n et d'autres représentations du texte de mise en forme.

OriginalL'auteur user2225772 | 2013-03-29