2010-06-02 7 views
0

J'ai essayé de passer un chemin de fichier à une fonction dans R, mais j'ai échoué =/J'espère que quelqu'un ici peut m'aider.Passer un chemin de fichier à une fonction R?

>heat <- function(filepath) 
{ chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
... 
} 

Quand j'appelle la fonction, rien ne se passe ...

>heat("/home/.../file.txt") 

... et "poussins" ne se trouve pas

>chicks 
Error: Object 'chicks' not found 

Quelle est la bonne façon de passer un chemin d'accès à une fonction?

+2

'retour (poussins)'? (bien que je ne les renverrais jamais une fois que j'en aurais ...) = – aL3xa

+0

putain, tu as raison !! Idée stupide !! Je viens de supprimer le code entier;) – Philipp

Répondre

6

Vous devriez être en mesure de transmettre des chemins de fichier comme vous avez (si le fichier existe). Vous pouvez également interroger les chemins de fichier dans R en utilisant list.files() [utilisez l'argument full.names=TRUE]. Cependant, dans ce cas, je crois que vous ne pouvez pas voir chicks parce qu'il est local à la fonction de sorte que vous ne serez pas en mesure de voir cette variable en dehors de la fonction. De plus, si votre dernière expression est une affectation, je crois que la sortie n'est pas imprimée. Essayez

> heat <- function(filepath) { 
+ read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
+ } 
> heat("/home/.../file.txt") 

ou

> chicks <- heat("/home/.../file.txt") 
> chicks 

et vous devriez voir chicks. Ou si vous voulez le voir imprimé tout en attribuant, ajouter des parenthèses autour de la déclaration:

> (chicks <- heat("/home/.../file.txt")) 

Si vous souhaitez attribuer à chicks au sein de la fonction, mais voir encore une fois la fonction terminée,

> heat <- function(filepath) { 
+ chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
+ assign("chicks",chicks,globalenv()) 
+ } 
+0

"Cependant, dans ce cas, je crois que vous ne pouvez pas voir les poussins, car il est local à la fonction de sorte que vous ne serez pas en mesure de voir cette variable en dehors de la fonction. Aaargh, c'était le problème ^^ Merci beaucoup! J'aurais dû demander plus tôt. Cela m'a coûté environ 2 heures: D – Philipp

1

également lorsque vous travaillez avec des chemins, il est souvent utile de vérifier si le fichier/dossier existe:

heat <- function(filepath){ 
    if(!file.exists(filepath)){ 
     stop(sprintf("Filepath %s does not exist",filepath)) 
    } 
    ... 
} 

Dans l'exemple ci-dessus, cependant, read.table donnera un message d'erreur si le fichier n'existe pas.

+0

merci, très utile aussi :) – Philipp

2

La fonction ne peut pas savoir ce que vous essayez de produire. Si vous ne le spécifiez pas, la sortie sera la dernière ligne viable, ce qui peut ne pas toujours être ce que vous voulez. Utilisez return() pour spécifier ce qui devrait apparaître en tant qu'objet.

heat <- function(filepath) { 
chicks <- read.table(file=filepath, dec=",", header=TRUE, sep="\t") 
... 
return(chicks) 
} 

inpt <- heat("/.../file.txt") 

Est-ce que cela aide votre problème?

+0

En fait, je n'ai pas besoin d'une valeur de retour, la fonction crée une carte thermique des données d'entrée, qui est enregistrée sous forme de fichier pdf. Le problème était, que je voulais juste retourner les poussins à tester, si le chemin a été passé correctement. Mais ce n'était pas du tout nécessaire. Je devais juste compléter le code et tout a bien fonctionné :-) Merci quand même, j'ai encore beaucoup de choses à apprendre :-) – Philipp

Questions connexes