【问题标题】:Why does the replicate function (rep) not return nested lists when given a list as input?为什么将列表作为输入时,复制函数(rep)不返回嵌套列表?
【发布时间】:2021-04-13 04:59:14
【问题描述】:

我不明白为什么以下两个命令会产生相同的输出:

rep(list(rnorm(2)), 2) %>% str
list(rnorm(2), rnorm(2)) %>% str
List of 2
 $ : num [1:2] 0.207 -0.293
 $ : num [1:2] 0.207 -0.293

List of 2
 $ : num [1:2] 0.0342 -1.1086
 $ : num [1:2] 2.186 -0.165

第一个命令不应该生成一个“元列表”,其中包含两个列表,每个列表都包含一个数字向量?因为我告诉复制函数:“复制包含数字向量的列表两次”。那么为什么它只复制列表的内容两次,而不复制列表本身呢?

并以此为基础:我将如何创建一个“元列表”来复制一个列表 n 次?

【问题讨论】:

  • 你想要replicate(2, list(rnorm(2)), simplify=FALSE) 代替吗?
  • 是的!这就是我期望rep(list(rnorm(2)), 2) %>% str 会做的事情。为什么rep() 会产生不同的输出?

标签: r


【解决方案1】:

我认为这是有道理的,所以我将尝试解释我的理解。
你重复输出的每一部分都应该和原来的对象相等吧?

让我们用一个简单的例子来确认这一点:

x <- 5
r <- rep(x,2)
identical(r[1], x)
##[1] TRUE
identical(r[2], x)
##[1] TRUE

然后像您的示例一样使用list

x <- list(rnorm(2))
r <- rep(x,2)
identical(r[1], x)
##[1] TRUE
identical(r[2], x)
##[1] TRUE

现在有一个更复杂的嵌入式列表示例:

xl <- list(rnorm(2))
x <- list(xl)
## above line is equivalent to x <- list(list(rnorm(2)))
r <- rep(x,2)
identical(r[1], x)
##[1] TRUE
identical(r[2], x)
##[1] TRUE

如果您想使用简单列表作为输入,也可以使用replicate

identical(r, replicate(2, xl, simplify=FALSE) )
##[1] TRUE

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2017-06-29
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多