【问题标题】:Function "rep" inside an "ifelse" does not return any repetition [duplicate]“ifelse”中的函数“rep”不返回任何重复[重复]
【发布时间】:2022-02-03 21:55:15
【问题描述】:

如果我输入

ifelse(TRUE, rep(1,10), 0)

我得到1 而不是1 1 1 1 1 1 1 1 1 1

为什么?这是一个错误吗?如何获得向量?

【问题讨论】:

  • 另一个有趣的,在某些情况下是一个方便的解决方案:x <- T; rep(+x, 9*x+1),您可以在T 上使用rep(1, 10) 或在F 上使用rep(0, 1)

标签: r


【解决方案1】:

因为ifelse是矢量化的,所以:

返回一个与 test 形状相同的值

由于您的测试只是一个单元素向量,因此您的返回只是rep(1, 10) 的第一个元素。

你想要的是if,它需要一个布尔值,然后运行以下代码,不管它是什么。如果你想返回你的else 语句,那么我们明确地包含else,如下所示。

if (TRUE) rep(1,10) else 0
#>  [1] 1 1 1 1 1 1 1 1 1 1

【讨论】:

    【解决方案2】:

    您应该知道ifelse 是矢量化的。这意味着,您的输出尺寸与条件一致。在您的代码中,由于条件 TRUE 是单个值,因此您的输出也应该是单个值。这就是为什么你得到1 而不是1 1 1 1 1 1 1 1 1 1


    你可以试试

    > ifelse(rep(TRUE,10), 1, 0)
     [1] 1 1 1 1 1 1 1 1 1 1
    

    > unlist(ifelse(TRUE, list(rep(1, 10)), 0))
     [1] 1 1 1 1 1 1 1 1 1 1
    

    【讨论】:

    • 但这不是同一个功能。我需要一个比较单个值的向量。
    • 这不是在回答问题。 OP 询问这种行为的“原因”。
    • @Jaap 是的,你是对的,我添加了一些 cmets。
    • @quesadagranja 查看我的更新
    猜你喜欢
    • 2016-08-10
    • 2022-08-16
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多