2016-07-15 3 views
-6

Mon entrée est un fichier texte:r - Comment séparer les valeurs numériques dans une cellule

Data 
[2.3, -1.2, 3.5] 
[0.1, -0.2, 4.9] 

Ma fonction R pour lire le fichier txt est:

inputR = read.table("Data.txt", header=TRUE, sep="\t", dec=".") 

Mon impression dans R est:

> print(inputR) 
Data 
[1] [2.3, -1.2, 3.5] 
[2] [0.1, -0.2, 4.9] 

Mon but est:

 V1 V2 V3 
[1] 2.3 -1.2 3.5  
[2] 0.1 -0.2 4.9  

Quand j'ai essayé dput() comme vous le suggérez, le résultat est quelque chose comme:

j'ai changé l'entrée de mon fichier texte maintenant, afin que je résoudre ce problème. Merci les gars de m'aider. Pourtant, s'il y a quelqu'un qui trouve une bonne solution pour cela, ce serait intéressant pour les autres à l'avenir.

+0

Essayez 'options (width = 10)' et voyez comme vous l'aimez. – Frank

+2

Pouvez-vous exécuter 'dput (V1)' et ajouter le résultat à votre question? – Qaswed

+0

Attendez une minute, @Qaswed est sur quelque chose. Si vous avez copié votre sortie directement, V1 n'est pas un vecteur avec trois éléments; si c'était le cas, il n'aurait pas les parenthèses ou les virgules. Vous devriez sauvegarder la question et nous donner une vue d'ensemble. Comment avez-vous lu ceci dans R? Qu'essayez-vous vraiment de faire? Autrement dit, la bonne réponse pour vous est probablement de faire quelque chose de différent plus tôt, pas de résoudre le problème ici. – Aaron

Répondre

0

Qu'est-ce que vous obtenez maintenant ressemble probablement ceci:

V1 <- c(2.3, -1.2, 3.5) 
print(V1) 

[1] 2.3 -1.2 3.5 

Si vous voulez désespérément qu'ils soient séparés, vous pouvez utiliser une boucle ou lapply:

invisible(lapply(V1, print)) 

[1] 2.3 
[1] -1.2 
[1] 3.5 

Vous pouvez même faire votre propre fonction:

print2 <- function(p){ 

    invisible(lapply(p, print)) 

} 

print2(V1) 

[1] 2.3 
[1] -1.2 
[1] 3.5 

Si les chiffres sur la gauche sont très diablotin ortant:

print3 <- function(p){ 

    for(i in seq_along(p)) 
    cat(sprintf("[%s] %s\n", i, p[i])) 

} 

print3(V1) 
[1] 2.3 
[2] -1.2 
[3] 3.5 
1

Votre question manque la partie "pourquoi"; Il pourrait y avoir une meilleure façon de penser à vos problèmes. En particulier, votre utilisation du mot «cellule» me fait penser que vous pensez comme une feuille de calcul, ce qui n'est pas le cas.

Si vous êtes seulement intéressé par la sortie, vous pouvez faire de votre vecteur une matrice avec une colonne; cela les alignera verticalement quand il est imprimé. Je le fais souvent quand j'ai besoin de comparer des valeurs car elles sont plus faciles à comparer verticalement qu'horizontalement. Cette méthode alignera également les décimales.

V1 <- 1:3 
matrix(V1, ncol=1) 
##  [,1] 
## [1,] 1 
## [2,] 2 
## [3,] 3 
+0

je commence à penser que R est peut-être pas capable de gérer ce que j'ai présenté ci-dessus. peut-être que je dois sauver mes valeurs différemment. – felix