gpt4 book ai didi

r - expand.grid 和 rep 如何协同工作以显示结果的所有组合?

转载 作者:行者123 更新时间:2023-12-04 07:37:31 25 4
gpt4 key购买 nike

我正在使用 repexpand.gridlists ,但输出不是我所期望的。文档不清楚如何expand.gridlists 合作.有人能解释一下这两个功能是如何协同工作的吗?rep复制向量的元素 x

x <- c(0, 1)
rep(x, 2)
# 0 1 0 1
所以它复制向量/列表元素。
但是,当我像这样运行它时:
rep(list(x),2)
#[[1]]
#[1] 0 1
#
#[[2]]
#[1] 0 1
为什么列表的两个不同条目中有两个重复元素?我期待这会产生 list 1 个元素包含 0 1 0 1 .
另外,使用 expand.grid在矢量 0 1 0 1给出:
expand.grid(c(0, 1, 0, 1))
# Var 1
#1 0
#2 1
#3 0
#4 1
但是,使用 expand.grid在上面的列表中给出:
expand.grid(rep(list(x), 2))
# Var1 Var2
#1 0 0
#2 1 0
#3 0 1
#4 1 1
这是如何运作的?

最佳答案

问题1:为什么rep(list(x),2)生成一个包含 2 个元素的列表?
考虑列表(目前)的最佳方式是它是一个向量,其元素可以是任何东西。当您运行时 list(x) ,您创建一个列表,其中第一个元素本身就是一个向量,即 0 1 .当您输入列表到 rep ,它将像复制向量一样简单地复制列表的元素。所以:

rep(list(x), 2)
复制 list(x) 的元素.由于它是一个长度为1的列表,所以会产生一个长度为2的列表。请记住,在这个过程中我从未谈论过元素的CONTENT。如果你想复制这些,那么你首先必须从列表中获取它们:
rep(list(x)[[1]], 2)
# [1] 0 1 0 1

问题 2:那么为什么 expand.grid(rep(list(x), 2))不是也输出一个列表吗?
那是因为 expand.grid被写入以两种方式工作:
  • 将每个向量/因子作为单独的参数提供
  • 将所有向量/因子放在一个列表中,并提供它作为唯一的参数

  • 由于您提供的是一份 list , expand.grid然后将查看每个元素的内容,并应用 expand.grid跨元素。实际上,您正在调用:
    expand.grid(c(0,1), c(0,1))
    事实上,只要我们提供两个参数,它就会返回一个更符合预期的行为(即两个列表的所有元素的所有组合):
    expand.grid(list(x, x + 1), list(x + 2, x + 3))
    # Var1 Var2
    #1 0, 1 2, 3
    #2 1, 2 2, 3
    #3 0, 1 3, 4
    #4 1, 2 3, 4

    关于r - expand.grid 和 rep 如何协同工作以显示结果的所有组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67668133/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com