如何在 R 中制作向量的向量

Posted

技术标签:

【中文标题】如何在 R 中制作向量的向量【英文标题】:How Can I Make A Vector of Vectors in R 【发布时间】:2021-12-25 11:03:15 【问题描述】:

我有一个简单的案例,我用一组这样的向量创建了一个数据框。

df1 = tibble(
  seed = rep(c(289805, 671086, 799837), 4),
  sd = rep(c(1, 3, 5, 10), each=3),
  ar = rep(c(.8, .9, .95), 4)
)
df1

# A tibble: 12 x 3
     #seed    sd    ar
    #<dbl> <dbl> <dbl>
 #1 289805     1  0.8 
 # 2 671086     1  0.9 
 # 3 799837     1  0.95
 # 4 289805     3  0.8 
 # 5 671086     3  0.9 
 # 6 799837     3  0.95
 # 7 289805     5  0.8 
 # 8 671086     5  0.9 
 # 9 799837     5  0.95
 #10 289805    10  0.8 
 #11 671086    10  0.9 
 #12 799837    10  0.95

我想要ar 列是这样的情况

df2 = tibble(
  seed = rep(c(289805, 671086, 799837), 4),
  sd = rep(c(1, 3, 5, 10), each=3),
  ar = rep(c(c(0.4, 0.4), c(0.45, 0.45), c(0.35, 0.6)), 4)
)
df2

我会有这样的东西。

# A tibble: 12 x 3
     #seed    sd    ar
    #<dbl> <dbl> <dbl>
 #1 289805     1  (0.4, 0.4) 
 # 2 671086     1  (0.45, 0.45) 
 # 3 799837     1  (0.35, 0.6)
 # 4 289805     3  (0.4, 0.4) 
 # 5 671086     3  (0.45, 0.45) 
 # 6 799837     3  (0.35, 0.6)
 # 7 289805     5  (0.4, 0.4) 
 # 8 671086     5  (0.45, 0.45) 
 # 9 799837     5  (0.35, 0.6)
 #10 289805    10  (0.4, 0.4) 
 #11 671086    10  (0.45, 0.45) 
 #12 799837    10  (0.35, 0.6)

相反,我收到此错误消息“错误:Tibble 列必须具有兼容的大小。

大小 12:现有数据。 大小 24:列 ar.`

这个问题是follow-up question to this answer

【问题讨论】:

rep(c(c(0.4, 0.4), c(0.45, 0.45), c(0.35, 0.6)), 4) 会给你一个长度为 24 (6 x 4) 的向量。您的其他列的长度为 12。要执行您想要的操作,ar 列应该(可能?)是一个列表,例如,tibble(a = 1:1, b = list(a = 1:2, b = 3:4))。但是你真的需要在ar的每一行中存储多个元素吗? 是的,我想将此答案 ***.com/questions/69315757/… 扩展到 ar of order 2order = c(2, 0, 0) 而不是 order = c(1, 0, 0) 【参考方案1】:

你的方法差不多了,只需使用一个列表

df1$ar <- rep(list(c(0.4, 0.4), c(0.45, 0.45), c(0.35, 0.6)), 4)

df1
     seed sd         ar
1  289805  1   0.4, 0.4
2  671086  1 0.45, 0.45
3  799837  1 0.35, 0.60
4  289805  3   0.4, 0.4
5  671086  3 0.45, 0.45
6  799837  3 0.35, 0.60
7  289805  5   0.4, 0.4
8  671086  5 0.45, 0.45
9  799837  5 0.35, 0.60
10 289805 10   0.4, 0.4
11 671086 10 0.45, 0.45
12 799837 10 0.35, 0.60

编辑:带小标题:

require(tibble)

df2 = tibble(
  seed = rep(c(289805, 671086, 799837), 4),
  sd = rep(c(1, 3, 5, 10), each=3),
  ar = rep(list(c(0.4, 0.4), c(0.45, 0.45), c(0.35, 0.6)), 4)
)

df2
# A tibble: 12 x 3
     seed    sd ar       
    <dbl> <dbl> <list>   
 1 289805     1 <dbl [2]>
 2 671086     1 <dbl [2]>
 3 799837     1 <dbl [2]>
 4 289805     3 <dbl [2]>
 5 671086     3 <dbl [2]>
 6 799837     3 <dbl [2]>
 7 289805     5 <dbl [2]>
 8 671086     5 <dbl [2]>
 9 799837     5 <dbl [2]>
10 289805    10 <dbl [2]>
11 671086    10 <dbl [2]>
12 799837    10 <dbl [2]>

【讨论】:

我无法重现与您相同的输出 # A tibble: 12 x 3 seed sd ar &lt;dbl&gt; &lt;dbl&gt; &lt;list&gt; 1 289805 1 &lt;dbl [2]&gt; 2 671086 1 &lt;dbl [2]&gt; 3 799837 1 &lt;dbl [2]&gt; 4 289805 3 &lt;dbl [2]&gt; 5 671086 3 &lt;dbl [2]&gt; 6 799837 3 &lt;dbl [2]&gt; 7 289805 5 &lt;dbl [2]&gt; 8 671086 5 &lt;dbl [2]&gt; 9 799837 5 &lt;dbl [2]&gt; 10 289805 10 &lt;dbl [2]&gt; 11 671086 10 &lt;dbl [2]&gt; 12 799837 10 &lt;dbl [2]&gt; seedsd 列相同,但 ar 列为每一行生成 &lt;dbl [2]&gt; 您的结果看起来不错。 &lt;list&gt; &lt;dbl [2]&gt; 也是我得到的。只是一种不同的打印方式。

以上是关于如何在 R 中制作向量的向量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用向量对的向量制作邻接表?

如何在 C++ 中制作类向量?

R:如何在 randomForest 中使用长向量?

r中如何判断数据框和向量

如何计算向量中的位数? (在 R 中)

在 R 中,如何选择和应用函数向量的元素?