【问题标题】:R how to store jagged arraysR如何存储锯齿状数组
【发布时间】:2014-01-27 20:09:58
【问题描述】:

这里,我需要构建一个交错数组来存储数据,这里是你的代码

a<-list()  
b=1 
for(i in 1:5){
 b+1
 a[i]<-array(0,c(b,1))
}

你可以看到,我想要做的是保存不同维度的数组,即使这里以0为例,也可以保存到a中。

您能帮我了解如何创建锯齿状数组/列表/矩阵,以存储不同维度的数组吗?

谢谢

【问题讨论】:

  • 你的意思是b &lt;- b+1b+1 在您的代码中不做任何事情。此外,您使用[[ 而不是[ 对列表进行索引。如果这不能回答您的问题,请解释您想要的输出应该是什么......
  • @Justin,我明白了,我需要使用 [[ ,而不是 [。非常感谢!!

标签: arrays r


【解决方案1】:

对于创建锯齿状数组也称为不规则数组,这是一个使用列表函数并使用 x[1] 进行索引的示例:

x = list(a=c(1,2,3,4),b=c(-1,-3,-4),c=c(23,45,23,45,25,48),d=c(2,1))
stk = stack(x)
ustk= unstack(stk)
identical(ustk,x)
[1] TRUE
> x
$a
[1] 1 2 3 4

$b
[1] -1 -3 -4

$c
[1] 23 45 23 45 24 48

$d
[1] 2 1

> x[1]
$a
[1] 1 2 3 4

> x[2]
$b
[1] -1 -3 -4

其他方法:

# empty list to start with
X <- list()
# we get a vector
v1 <- c(1, 2, 3, 4, 5)
# add it to the ragged array
X <- c(X, list(v1))
# get another couple of vectors and add them as well
v2 <- c(9, 8, 7, 6)
v3 <- c(2, 4, 6, 8)
X <- c(X, list(v2, v3))

# add some more elements to the first vector in 
# the vector directly
X[[1]] <- c(X[[1]], 4, 3, 2, 1)

对于创建的锯齿状矩阵,这是一个示例:

x = c(3,2,5)
struct = lapply(x, function(i){ 
    sapply(1:i, function(k){
        c(rep(NA, k-1),exp( - (0:(i-k))))
    })
})
> x
[1] 3 2 5
> struct
[[1]]
          [,1]      [,2] [,3]
[1,] 1.0000000        NA   NA
[2,] 0.3678794 1.0000000   NA
[3,] 0.1353353 0.3678794    1

[[2]]
          [,1] [,2]
[1,] 1.0000000   NA
[2,] 0.3678794    1

[[3]]
           [,1]       [,2]      [,3]      [,4] [,5]
[1,] 1.00000000         NA        NA        NA   NA
[2,] 0.36787944 1.00000000        NA        NA   NA
[3,] 0.13533528 0.36787944 1.0000000        NA   NA
[4,] 0.04978707 0.13533528 0.3678794 1.0000000   NA
[5,] 0.01831564 0.04978707 0.1353353 0.3678794    1

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 2020-04-02
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2023-03-15
    • 2013-06-21
    • 2015-07-01
    • 2015-05-06
    相关资源
    最近更新 更多