如何在 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 2
即 order = 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 <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]>
seed
和 sd
列相同,但 ar
列为每一行生成 <dbl [2]>
。
您的结果看起来不错。 <list> <dbl [2]>
也是我得到的。只是一种不同的打印方式。以上是关于如何在 R 中制作向量的向量的主要内容,如果未能解决你的问题,请参考以下文章