R:难以操纵 bigz vectors/list
R: Difficulties manipulating bigz vectors/list
下面是我每天使用的两个方案,但我在使用 gmp
包时遇到了问题:
正常行为:
### 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
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
如果有 gmp 等价物(即 unlist.bigz)就好了,因为我们知道 R 中 "grow" 的对象可能会非常慢。大多数时候,我被迫声明一个空的 bigz 向量并不断地添加到它,如:
> 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
>
我通常声明具有给定模式和长度的向量,但是当我尝试使用 bigz
向量执行此操作时: v4 <- as.bigz(vector(length=n))
然后尝试填充向量的子集,我得到结果如上(即具有一列的矩阵)。这是非常不受欢迎的。
您可以使用 c
函数组合 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
下面是我每天使用的两个方案,但我在使用 gmp
包时遇到了问题:
正常行为:
### 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
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
如果有 gmp 等价物(即 unlist.bigz)就好了,因为我们知道 R 中 "grow" 的对象可能会非常慢。大多数时候,我被迫声明一个空的 bigz 向量并不断地添加到它,如:
> 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
>
我通常声明具有给定模式和长度的向量,但是当我尝试使用 bigz
向量执行此操作时: v4 <- as.bigz(vector(length=n))
然后尝试填充向量的子集,我得到结果如上(即具有一列的矩阵)。这是非常不受欢迎的。
您可以使用 c
函数组合 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