2017-06-09 1 views
0

J'ai méthode assez simple qui attribue des valeurs pour ma liste de la manière suivante: 1. Il va dans le dossier avec les fichiers 2. Vérifie la présence du fichier avec le numéro de banque, je mis 3. Si elle est là, il faut des données à partir pour une date donnée, encore une fois que je mets dans cette méthode Voici la méthode:Attribuer des valeurs en fonction de deux conditions (non trivial)

balancesheet.list <- getBalanceSheet_list("2016-04-01",1481) 

Ainsi, dans cet exemple particulier, il va à le dossier, prend le fichier avec le numéro 1481 et affecte les données pour la date 2016-04-01 de ce fichier à ma liste.

Je dois assigner des données de tous les fichiers dans ce dossier pour chaque date dont j'ai besoin. Les données concernant chaque date et numéro de banque doivent être enregistrées dans une sous-liste distincte ou une liste séparée. Pour plus de détails, je dois attribuer des données à partir du 01/04/2007 et jusqu'au 01/01/2017 par mois pour chaque numéro de banque. J'ai créé deux fichiers csv: une avec plage de dates dont j'ai besoin par mois:

2007-02-01 
2007-03-01 
2007-04-01 
2007-05-01 
2007-06-01 
... 
2016-11-01 
2016-12-01 
2017-01-01 

et le second avec des numéros bancaires je en général:

1 
2 
21 
52 
53 
55 
... 
3525 
3527 
3528 
3529 
3533 

Mon idée était d'importer ces fichiers dans R et mettez-les à la place "2016-04-01" et 1481. Mais c'est une mauvaise idée comme je l'ai vu.

Aussi j'ai décidé d'essayer le code suivant, pas importer tous les fichiers:

balancesheet.list<- getBalanceSheet_list(seq(as.Date("2007-04-01"), as.Date("2017-01-01"), by="months"),1481) 

R donne une erreur: longueur de l'argument "pattern" est> 1, seulement le premier élément sera utilisé

Si je comprends bien le problème est qu'il essaie d'assigner des données de plusieurs mois dans une liste. Peut-être est-il possible de le dire pour enregistrer des données par listes ou sous-listes pour chaque date distincte?

Comment l'une des deux idées peut-elle être modernisée? S'il vous plaît, aidez.

Répondre

1

Vous pouvez essayer

lapply(seq(as.Date("2007-04-01"), as.Date("2017-01-01"),by="months"),getBalanceSheet_list,1481) 

Cela devrait vous donner des données à partir du fichier 1481 pour toutes les dates. Je dis « sholud » parce qu'il est difficile d'être sûr, quand vous ne fournissez pas de détails sur getBalanceSheet_list fonction;)

Non, nous pouvons faire une funtion

one_file <- function(file) lapply(seq(as.Date("2007-04-01"), as.Date("2017-01-01"),by="months"),getBalanceSheet_list, file) 

et l'exécuter pour tous les fichiers. Mais d'abord, nous avons besoin d'un vecteur avec leurs noms, dites:

files<-c(1, 2, 21, ...) 

De toute évidence, vous devez changer ... en numers. Je ne peux pas le faire, beacuse (encore une fois), vous ne leur fournissait pas :)

maintenant

lapply(files, one_file) 

sholud vous donner toutes les informations dont vous avez besoin.Vous pouvez également remplacer tous les lapply avec sapply. Cela rendrait les résultats plus jolis si seulement getBalanceSheet_list retourne un joli objet (comme un vecteur ou une valeur unique).