2017-05-11 1 views
0

Je suis relativement nouveau à R et j'ai besoin de créer une fonction dans laquelle après chaque appel, une trame de données lui aura ajouté une autre ligne.Fonction qui lie de nouvelles lignes dans R

C'est ce que la trame de données vide doit être (aka titre de ses lignes):

Percent Category Word 

La fonction est

output <- function(category, word) 

qui à la fin de calculer un pour cent à partir de ces mots.

Ainsi, par exemple, la catégorie (Lung, femelle) génèrerait un pour cent de 51, et donc la trame de données résultant serait

Percent Category Word 
51  Lung  Female 

Si je devais exécuter à nouveau la fonction avec, disons que la catégorie (Blood , Homme), dont 71 pour cent est je voudrais que le dataframe résultant soit

Percent Category Word 
51  Lung  Female 
71  Blood Male 

et je veux essentiellement pour exécuter la fonction autant de fois que je ne voudrais, annexant des lignes en continu. Cependant, la base de données est seulement locale et non globale, donc quand j'exécute la fonction et que je produis la base de donnée, cette ligne apparaît dans la console mais rien n'apparaît dans mon environnement global. Voilà ce que j'ai (en omettant le début de la fxn qui calcule pour cent):

output <- function(category, word) 
{ 
    row <- data.frame(percent, category, word) 
    # row <- rbind(row, row) # I don't know... 
    return (row) 
} 

Étant donné que la fonction calcule une variable pour cent, comment pourrais-je créer une trame de données accessible à partir de l'environnement mondial où cette fonction ajoute des lignes à il? Dois-je créer une base de données dans l'environnement global, puis l'essayer?

+3

ca vous le faire en dehors de la fonction avec 'df <- rbind (df, sortie ("poumon", "Femme"))' – HubertL

+0

@ suggestion de HubertL devrait fonctionner, mais l'ajout de rangs un par un est souvent beaucoup plus lent dans R que dans les autres approches. Si vos données sont suffisamment importantes pour que vous rencontriez des problèmes de vitesse avec cette approche, vous pouvez probablement poser une nouvelle question demandant de l'aide pour l'améliorer. – Marius

Répondre

0

Une solution utilisant nrow pour compter le nombre de lignes du data.frame.

df<-data.frame(percent=as.numeric(), category=as.character(), word=as.character(), 
stringsAsFactors = F) #setting up empty data.frame 

output <- function(df,category, word){ 
    percent<-12 #fictious percentage 
    df[nrow(df)+1,]<- data.frame(percent=percent, category=category, word=word, 
    stringsAsFactors = F) #adding the information to the next row of the data.frame 
    return(df) 
} 

df<-output(df,"bla","bla") 
df<-output(df,"sdfd","dfsdf") 
df<-output(df,"xfdfd","qweqweqw") 
df<-output(df,"asdad","etwt") 

Sortie:

#percent category  word 
#1  12  bla  bla 
#2  12  sdfd dfsdf 
#3  12 xfdfd qweqweqw 
#4  12 asdad  etwt