Comment rendre l'objet créé dans la fonction utilisable à l'extérieur
J'ai créé une fonction qui produit une matrice comme un résultat, mais je ne peux pas comprendre comment faire de la sortie de cette fonction utilisable à l'extérieur de la fonction de l'environnement, de sorte que je pourrait, par exemple, l'enregistrer dans un fichier csv.
Mon code pour la fonction est la suivante:
créé une fonction qui prend un url de site spécifique et renvoie le titre de la page:
getTitle <- function(url) {
webpage <- readLines(url)
first.row <- webpage[1]
start <- regexpr("<title>", first.row)
end <- regexpr("</title>", first.row)
title <- substr(first.row,start+7,end-1)
return(title)
}
créé une fonction qui prend vecteur d'url et retourne le n*2 de la matrice avec les urls, et les titres de page:
getTitles <- function(pages) {
my.matrix <- matrix(NA, ncol=2, nrow=nrow(pages))
for (i in seq_along(1:nrow(pages))) {
my.matrix[i,1] <- as.character(pages[i,])
my.matrix[i,2] <- getTitle(as.character(pages[i,])) }
return(my.matrix)
print(my.matrix)}
Après l'exécution de ces fonctions sur un exemple de fichier à partir d'ici http://goo.gl/D9lLZ qui je l'importation à lire.csv fonction et le nom "mypages", j'obtiens le résultat suivant:
getTitles(mypages)
[,1] [,2]
[1,] "http://support.google.com/adwords/answer/1704395" "Create your first ad campaign - AdWords Help"
[2,] "http://support.google.com/adwords/answer/1704424" "How costs are calculated in AdWords - AdWords Help"
[3,] "http://support.google.com/adwords/answer/2375470" "Organizing your account for success - AdWords Help"
C'est exactement ce dont j'ai besoin, mais j'aimerais être en mesure d'exporter cette sortie au format de fichier csv ou de les réutiliser pour de nouvelles manipulations. Cependant, lorsque j'essaie d'imprimer(mon.la matrice), j'obtiens un message d'erreur indiquant "Erreur: l'objet 'mon.matrice "pas trouvé"
J'ai l'impression que c'est assez basique écart à ma connaissance, mais n'ont pas été en collaboration avec la R pour un certain temps et n'a pas pu résoudre.
Merci!
Sergey
source d'informationauteur Sergey Samusev
Vous devez vous connecter pour publier un commentaire.
C'est simple: utiliser
<<-
pour l'affectation à un mondial.Mais là encore, la cession globale est le mal et de ne pas fonctionnelle. Peut-être que vous préférez retourner
une liste avec plusieurs résultats à partir de votre fonction? En regardant ton code, il semble que votre deuxième fonction peut confondre le
return
etprint
. Assurez-vous de retourner la bonne structure de données.Un peu sur la programmation fonctionnelle. Tout d'abord, lorsque vous définissez votre fonction:
savoir que lorsque la fonction est appelée, elle n'atteindra jamais la
print
déclaration. Au lieu de cela, elle va sortir juste avant, avecreturn
. De sorte que vous pouvez supprimer queprint
déclaration, il est inutile.Maintenant, le plus important des trucs. À l'intérieur de votre fonction, vous définissez et retour
my.matrix
. L'objet n'existe que dans le domaine de la fonction: la fonction se termine, ce qui est retourné est un sans nom objet (etmy.matrix
est perdu.)Dans votre session, lorsque vous appelez
le résultat est imprimé parce que vous n'avez pas l'affecter. Au lieu de cela, vous devriez faire:
Maintenant, le résultat ne sera pas imprimé, mais vous pouvez certainement le faire en tapant
print(out.matrix)
ou tout simplementout.matrix
sur une seule ligne. Et parce que vous avez stocké le résultat dans un objet, vous pouvez maintenant réutiliser pour de nouvelles manipulations.S'il vous aider à saisir le concept, c'est tout de même que l'appel de la
c()
fonction à partir de la ligne de commande:Bonus: Vraiment, je ne pense pas que vous avez besoin de définir
getTitles
mais vous pouvez utiliser l'un des*apply
fonctions. Je voudrais essayer ceci:Ne pouvez-vous pas simplement utiliser
<<-
à attribuer à l'objet à l'espace de travail? Le code suivant fonctionne pour moi et sauve leamort_value
objet.À la fin de la fonction, vous pouvez
return
le résultat.D'abord définir la fonction:
Puis d'appeler et de lui attribuer la sortie d'une variable:
À partir d'ici sur l'utilisation
scoreRange
dans l'environnement. Toutes les variables ou de fonctions imbriquées dans votre fonction définie n'est pas accessible à l'extérieur, à moins bien sûr, vous utilisez<<-
pour affecter une variable globale. Donc, dans cet exemple, vous ne pouvez pas voir cenumRange
est de l'extérieur, sauf si vous faites à l'échelle mondiale.Généralement, essayez d'éviter les variables globales à un stade précoce. Les Variables sont "encapsulées" nous savoir lequel est utilisé dans le contexte actuel ("environnement"). Les variables globales sont plus difficiles à apprivoiser.