2010-04-07 5 views
2

J'ai un simple à deux vecteur dataframe (longueur = 30) qui ressemble à ceci:Création d'une série de vecteurs d'un vecteur

> mDF 
    Param1 w.IL.L 
1 AuZgFw 0.5 
2 AuZfFw  2 
3 AuZgVw 74.3 
4 AuZfVw 20.52 
5 AuTgIL 80.9 
6 AuTfIL 193.3 
7 AuCgFL 0.2 
8 ... 

Je voudrais utiliser chacune des lignes pour former 30 chambres simples valeur des vecteurs numériques avec le nom du vecteur pris de mDF$Param1, de sorte que:

> AuZgFw  
[1] 0.5  

etc

J'ai essayé la fusion et la coulée, mais je pense qu'il peut y avoir un moyen plus facile?

Répondre

5

L'est de applyassign sur les lignes simple/chemin le plus court:

mDF <- read.table(textConnection(" 
Param1 w.IL.L 
1 AuZgFw 0.5 
2 AuZfFw  2 
3 AuZgVw 74.3 
4 AuZfVw 20.52 
5 AuTgIL 80.9 
6 AuTfIL 193.3 
7 AuCgFL 0.2 
"),header=T,stringsAsFactors=F) 
invisible(apply(mDF,1,function(x)assign(x[[1]],as.numeric(x[[2]]),envir = .GlobalEnv))) 

Cela implique la conversion de la deuxième colonne de la trame de données vers et à partir d'une chaîne. invisible est là seulement pour supprimer la sortie de apply.
EDIT: Vous pouvez également utiliser mapply pour éviter coersion à/de chaînes:

invisible(mapply(function(x,y)assign(x,y,envir=.GlobalEnv),mDF$Param1,mDF$w.IL.L))

+0

La version 'est de mapply' un morceau de code agréable. Et si vous ne voulez pas modifier les colonnes tapez 'data.frame', il pourrait utiliser' as.character' sur le second argument 'mapply'. – Marek