2016-01-21 2 views
0

Voici deux régimes que j'utilise sur une base quotidienne que je vais avoir des problèmes avec l'aide du package gmp:R: Les difficultés manipulation des vecteurs bigz/Liste

Comportement normal:

### example 1 (changing a subset of a vector) 
> v1 <- rep(1,10) 
> v1[3:7] <- 2:6 
> v1 
[1] 1 1 2 3 4 5 6 1 1 1 

### example 2 (flattening a list to a vector) 
> mylist1 <- list(1:5,6:10) 
> unlist(mylist1) 
[1] 1 2 3 4 5 6 7 8 9 10 

équivalents GMP:

### example 1 (when changing a subset, the vector is lost) 
> v2 <- as.bigz(rep(1,10)) 
> v2[3:7] <- as.bigz(2:6) 
> v2 
Big Integer ('bigz') 10 x 1 matrix: 
    [,1] 
[1,] 1 
[2,] 1 
[3,] 2 
[4,] 3 
[5,] 4 
[6,] 5 
[7,] 6 
[8,] 1 
[9,] 1 
[10,] 1 

### example 2 (strange behavior when flattening) 
> mylist2 <- list(as.bigz(1:5),as.bigz(6:10)) 
> unlist(mylist2) 
[1] 05 00 00 00 01 .... ##### many more "raw"-like entries 

Ce serait bien s'il y avait gmp Equival ents (c.-à-d. unlist.bigz) car nous savons que les objets qui "grandissent" dans R peuvent être excessivement lents. La plupart du temps, je suis obligé de déclarer un vecteur bigz vide et constamment y ajouter comme:

> v3 <- as.bigz(rep(1,2)) 
> v3 <- c(v3, as.bigz(2:6)) 
> v3 <- c(v3, as.bigz(rep(1,3))) 
> v3 
Big Integer ('bigz') object of length 10: 
    [1] 1 1 2 3 4 5 6 1 1 1 
> 

Je déclare généralement des vecteurs avec un mode donné et la longueur, mais lorsque je tente de le faire avec un bigz vecteur comme: v4 <- as.bigz(vector(length=n)) et puis essayer de peupler des sous-ensembles du vecteur, j'obtiens des résultats comme ci-dessus (c'est à dire une matrice avec une colonne). Ceci est hautement indésirable.

Répondre

1

Vous pouvez utiliser la fonction c de combiner une liste des objets bigz:

bigz.list <- list(
    as.bigz(1), 
    as.bigz(1), 
    as.bigz(2:6), 
    as.bigz(rep(1,3))) 

> do.call(c, bigz.list) 
Big Integer ('bigz') object of length 10: 
[1] 1 1 2 3 4 5 6 1 1 1