如何在r中使用类c结构

如何在r中使用类c结构,r,R,我是从matlab到r的转换代码。我在matlab中有类似c结构的代码 for i = 1:m0 Ent(i).connums = m0 - 1; % number of neighbours Ent(i).con = [1:i-1 i+1:m0]'; % neighbour list Ent(i).H = []; Ent(i).L = [];

我是从matlab到r的转换代码。我在matlab中有类似c结构的代码

for i = 1:m0                       
    Ent(i).connums = m0 - 1;        % number of neighbours
    Ent(i).con = [1:i-1 i+1:m0]';   % neighbour list
    Ent(i).H = [];                  
    Ent(i).L = [];                  
end 
上面代码中的
Ent
是一个类似c的结构数组。我正在尝试将图形存储为相邻列表。在r中,我试图使用列表列表。例如,
Ent
是包含节点的列表列表。
Ent
中的子列表是包含节点详细信息的列表

我尝试的是:

rm(list = setdiff(ls(), lsf.str()))
m0<-4
Ent <- list()

for (i in seq(1, m0))                       
{
    connums <- m0 - 1                       
    if (i + 1 > m0)                             
    {
        con <- seq(1,i-1)
    }
    else if (i - 1 < 1)
    {
        con <- c(seq(i+1,m0))
    }
    else
    {
        con <- c(seq(1,i-1), seq(i+1,m0))
    }

    H <- 0                             
    L <- 0                              
    Ent <- c(Ent, list(n=i, connums=connums, con=con, H=H, L=L))
}
Ent
is.list(Ent)
is.vector(Ent)
print(length(Ent))

for (f in Ent)
{
    print(f)
}

为什么
Ent
的长度是20?这份名单似乎没有列出。我的预期结果可能是列表中的子列表。子列表的
Ent
长度应为4。我读了这篇文章,仍然找不到我的解决办法。有可能在r中存储类似c的结构吗?怎么做?有其他的解决方案吗

列表的长度是20,因为
Ent当你否决这个问题时,请留下评论让我知道原因。谢谢。这是新台币H的一种很好的替代方式。新台币con呢?它不是一种价值;这是一个序列。假设序列始终具有相同的长度,您可以尝试将其绑定到矩阵中的
Ent$con=rbind(Ent$con,con)
。如果它的长度不总是相同的,你可以把它做成一个嵌套列表,其中
Ent$con
是一个列表,
Ent$con[[1]
是第一个序列,
Ent$con[[2]]
是第二个序列,等等。你可以通过
Ent$con=c(list(Ent$con),list(con))
来实现。con的长度是不固定的<代码>Ent$con=c(列表(Ent$con),列表(con))
无法获得预期结果<代码>尽管如此,这似乎是可行的:
Ent=list(con=list(1:3));con=2:4;Ent$con=c(Ent$con,列表(con));con=3:5;Ent$con=c(Ent$con,列表(con))
。是,列表->子列表->向量。Ent->con->1:3。谢谢@Vandenman,这应该是r风格的代码。
> Ent
$n
[1] 1

$connums
[1] 3

$con
[1] 2 3 4

$H
[1] 0

$L
[1] 0

$n
[1] 2

$connums
[1] 3

$con
[1] 1 3 4

$H
[1] 0

$L
[1] 0

$n
[1] 3

$connums
[1] 3

$con
[1] 1 2 4

$H
[1] 0

$L
[1] 0

$n
[1] 4

$connums
[1] 3

$con
[1] 1 2 3

$H
[1] 0

$L
[1] 0

> is.list(Ent)
[1] TRUE
> is.vector(Ent)
[1] TRUE
> print(length(Ent))
[1] 20
> for (f in Ent)
+ {
+ print(f)
+ }
[1] 1
[1] 3
[1] 2 3 4
[1] 0
[1] 0
[1] 2
[1] 3
[1] 1 3 4
[1] 0
[1] 0
[1] 3
[1] 3
[1] 1 2 4
[1] 0
[1] 0
[1] 4
[1] 3
[1] 1 2 3
[1] 0
[1] 0
Ent$H = c(Ent$H, ...) # replace ... with values to append
Ent$L = c(Ent$L, ...)