【问题标题】:How to make variable size 2d arrays in R?如何在 R 中制作可变大小的二维数组?
【发布时间】:2021-05-06 13:21:29
【问题描述】:

我想创建一个二维数组来存储已知数量的元素,每个元素的长度未知。但是,我对 R 没有经验,我尝试过的所有事情要么要求您事先说明尺寸,要么之后不要让您附加到元素上。这是我尝试过的:

b <- list(rep(c(), 5))
for (i in 1:5) {
  for (j in 1:i) {
    b[i] <- append(b[i], i)
  }
  print(b[i])
}

这给出了这个警告Warning message in b[i] &lt;- append(b[i], i): “number of items to replace is not a multiple of replacement length” 并且什么都不做

这是我想要实现的,但在 python 中:

b = [[] for _ in range(5)]
for i in range(1,6):
  for _ in range(i):
    b[i-1].append(i)

我不介意不同的数据类型,像字典这样的东西就可以了,但我很难了解它在这种特殊情况下是如何工作的。上面的例子都挺傻的,但总之我想要实现的是:[ [1,2,3], [1,2,3,4], [1] ] 或者{ 'a': [1,2], 'b': [1,2,3] }

在 R 中最简洁的方法是什么?

【问题讨论】:

  • 我认为您正在寻找list(),它应该能够以您正在寻找的方式保存信息。

标签: r arrays list


【解决方案1】:

您不需要附加列表,只需将其添加到预先存在的列表中即可。


b <- list()

for(i in 1:5){
  b[length(b)+1] <- list(seq(1:i))
}

如果您想添加到现有列表中,只需使用c()

b[[3]] <- c(b[3][[1]], 1)

【讨论】:

  • 谢谢,这会很有用。但是,如果我以后想更改它怎么办?例如,像这样:b[3] &lt;- append(b[3], 1)
  • @user9102437 您可以使用c() 而不是append 将元素添加到列表中
【解决方案2】:

根据您所说,您希望在 R 中与 Python 中的以下代码等效,

b = [[] for _ in range(5)]
for i in range(1,6):
  for _ in range(i):
    b[i-1].append(i)

返回以下输出:

[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]

我在 R 中有两种方法。

num_elements = 5

第一种方法您需要加载rlist 库。检查here

install.packages("rlist")
library(rlist)

list1 <- list()
for (i in 1:num_elements) {
  list1 <- list.append(list1, rep(i,i))
}
list1

第二种方法预定义了一个固定大小的初始列表。

list2 <- list(rep(NULL,num_elements))
for (i in 1:num_elements) {
  list2[i] <- list(rep(i,i))
}
list2

在这两种方式中,输出如下:

[[1]]
[1] 1

[[2]]
[1] 2 2

[[3]]
[1] 3 3 3

[[4]]
[1] 4 4 4 4

[[5]]
[1] 5 5 5 5 5

要将项目作为数字序列的列表,只需将rep 更改为seq,如下所示:

list1 <- list()
for (i in 1:num_elements) {
  list1 <- list.append(list1, seq(1,i))
}

在这种情况下,输出是:

[[1]]
[1] 1

[[2]]
[1] 1 2

[[3]]
[1] 1 2 3

[[4]]
[1] 1 2 3 4

[[5]]
[1] 1 2 3 4 5

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多