web-dev-qa-db-fra.com

Comment puis-je enregistrer une liste dans un fichier et la relire (en R)?

J'ai estimé un modèle avec le package poLCA dans R et je veux enregistrer les valeurs de départ dans un fichier, donc je peux ré-estimer exactement le même modèle à tout moment.

Voici une liste de valeurs de départ pour un modèle:

List of 8
 $ : num [1:2, 1:6] 0.219 0.193 0.16 0.193 0.184 ...
 $ : num [1:2, 1:6] 0.0731 0.2054 0.228 0.144 0.2028 ...
 $ : num [1:2, 1:6] 0.0396 0.0965 0.0286 0.1494 0.1609 ...
 $ : num [1:2, 1:6] 0.20998 0.173634 0.105792 0.000588 0.06236 ...
 $ : num [1:2, 1:6] 0.163 0.19 0.167 0.178 0.246 ...
 $ : num [1:2, 1:6] 0.1602 0.1438 0.1963 0.0848 0.2218 ...
 $ : num [1:2, 1:6] 0.0298 0.3022 0.2179 0.094 0.0228 ...
 $ : num [1:2, 1:6] 0.0167 0.2444 0.3257 0.1298 0.3652 ...

Et ce sont toutes ses valeurs:

> starting.values

[[1]]
          [,1]      [,2]       [,3]        [,4]      [,5]      [,6]
[1,] 0.2188410 0.1602971 0.18446855 0.002413188 0.1841924 0.2497878
[2,] 0.1927328 0.1926757 0.04098356 0.104583224 0.1583117 0.3107131

[[2]]
           [,1]      [,2]      [,3]      [,4]       [,5]      [,6]
[1,] 0.07310624 0.2280248 0.2027862 0.2274362 0.03105063 0.2375959
[2,] 0.20535603 0.1439554 0.1869197 0.1317791 0.20698352 0.1250063

[[3]]
           [,1]       [,2]      [,3]      [,4]       [,5]      [,6]
[1,] 0.03955110 0.02855405 0.1609203 0.3375032 0.15405189 0.2794195
[2,] 0.09650825 0.14942635 0.1016048 0.2445582 0.07646363 0.3314387

[[4]]
          [,1]         [,2]       [,3]       [,4]      [,5]      [,6]
[1,] 0.2099798 0.1057921697 0.06235958 0.06833102 0.2474372 0.3061002
[2,] 0.1736344 0.0005879314 0.06184313 0.36905589 0.2575882 0.1372904

[[5]]
          [,1]      [,2]      [,3]      [,4]      [,5]       [,6]
[1,] 0.1631299 0.1672565 0.2460589 0.2199485 0.1620184 0.04158786
[2,] 0.1900245 0.1777367 0.1136598 0.1576786 0.1147886 0.24611175

[[6]]
          [,1]       [,2]      [,3]      [,4]      [,5]       [,6]
[1,] 0.1601707 0.19628931 0.2217799 0.1985856 0.1961983 0.02697623
[2,] 0.1437703 0.08483575 0.3475932 0.1029784 0.2134874 0.10733507

[[7]]
          [,1]       [,2]       [,3]      [,4]       [,5]      [,6]
[1,] 0.0297938 0.21786564 0.02278498 0.2173179 0.28299340 0.2292443
[2,] 0.3021657 0.09397824 0.16714915 0.3072889 0.02752554 0.1018925

[[8]]
           [,1]      [,2]      [,3]      [,4]      [,5]       [,6]
[1,] 0.01670364 0.3256942 0.3652010 0.1620259 0.1111144 0.01926083
[2,] 0.24443214 0.1297942 0.3064312 0.1105086 0.1461748 0.06265905

J'ai d'abord pensé que je pouvais convertir la liste en un cadre de données et l'enregistrer en tant que fichier .csv. Mais je ne sais pas, comment je lirais ce fichier pour avoir exactement la même liste, que j'obtiens du modèle. J'ai déjà regardé stackoverflow, mais je n'ai pas trouvé la réponse à ma question. Cela ne me dérange pas si le fichier sera .csv, .txt ou si c'est un ou plusieurs fichiers. Je suis désolé, si je ne peux plus proposer d’idées ou de code pour ma question. Je ne sais pas où commencer. Merci de votre aide!

13
SEMson
save(starting.values, file="fname.RData")
?save

Vous permet d'enregistrer un ou plusieurs objets R dans un seul fichier.

Charger avec

load("fname.RData")
12
Whitebeard

Je vous suggère également d'explorer rlist le package et le list.save fonctionne car il offre une flexibilité supplémentaire lors de l'enregistrement des listes.

Exemple

Tel que disponible dans documentation.

require(rlist)
x <- lapply(1:5,function(i) data.frame(a=i,b=i^2))
list.save(x, 'list.rds')
list.save(x, 'list.rdata')
list.save(x, 'list.yaml')

yaml aperçu du fichier

- a: 1
  b: 1.0
- a: 2
  b: 4.0
- a: 3
  b: 9.0
- a: 4
  b: 16.0
- a: 5
  b: 25.0

Vous pouvez ensuite charger la liste en utilisant le list.load dans le même paquet ou vous pouvez lire les lignes du fichier yaml exporté. Vous pouvez également envisager de consulter le list.select fonction et sélection d'objets dans la liste. Cela dit, je suppose que la façon la plus simple d'aborder ce problème serait simplement de stocker/charger un objet de liste complète.

8
Konrad