gpt4 book ai didi

R - 使用带有逻辑值的开关

转载 作者:行者123 更新时间:2023-12-04 09:38:03 26 4
gpt4 key购买 nike

switch()接受作为第一个参数

"EXPR an expression evaluating to a number or a character string."



但是,它可以被强制使用逻辑吗?如果是这样,我在这段代码中做错了什么吗?

我有一个包含数据框中逻辑值的列,我想根据逻辑参数编写一个包含数据框中现有数据值的新列:
exampleCurrent <- data.frame(value = c(5.5, 4.5, 4, 2.9, 2),
off = as.logical(c("F", "F", "T", "T", "F")),
extremeValue = as.logical(c("F", "F", "F", "F", "T")),
eclMinWork = c(5, 5.3, 5, 4.7, 3),
eclMinOff = c(4, 3.2, 3, 4, 3))

我想解决这个问题:
exampleWanted <- data.frame(value = c(5.5, 4.5, 4, 2.9, 2),
off = as.logical(c("F", "F", "T", "T", "F")),
extremeValue = as.logical(c("F", "F", "F", "F", "T")),
eclMinWork = c(5, 5.3, 5, 4.7, 4),
eclMinOff = c(4, 3.2, 3, 4, 3),
output = c(5, 4.5, 3, 2.9, 3))

选择号码的规则是:
  • 查询 off .如 off为 FALSE,从 value 中选择或 eclMinWork .如 off为真,从 value 中选择或 eclMinOff
  • 查询 extremeValue .如 extreneValue = FALSE,选择 value 中的较小者和步骤 1 中的字段。如果 extremeValue = TRUE,从步骤 1 中的字段中选择值。

  • 我已经成功写了一个 ifelse()执行,虽然我想知道我是否可以使用 switch反而。
    exampleGenerated <- cbind(exampleCurrent, bestCase =
    switch(exampleCurrent$off,
    FALSE = ifelse(exampleCurrent$value<exampleCurrent$eclMinWork,exampleCurrent$value, exampleCurrent$eclMinWork),
    TRUE = ifelse(exampleCurrent$value<exampleCurrent$eclMinOff,exampleCurrent$value, exampleCurrent$eclMinOff)))

    以上抛出了一个错误,我假设 FALSE 不是一个字符,也不是(从表面上看)数字或字符:
    Error: unexpected '=' in: switch(exampleCurrent$off, FALSE ="

    但是,我尝试包装 as.numericas.character周围的变量也失败了。有没有办法做到这一点,或者我是否遗漏了代码中的一个基本错误?

    最佳答案

    你不需要switch对于这个任务。使用 ifelse 更容易和 pmin :

    tmp <- with(exampleCurrent, ifelse(off, eclMinOff, eclMinWork))
    transform(exampleCurrent,
    bestCase = ifelse(extremeValue, tmp, pmin(value, tmp)))

    # value off extremeValue eclMinWork eclMinOff bestCase
    # 1 5.5 FALSE FALSE 5.0 4.0 5.0
    # 2 4.5 FALSE FALSE 5.3 3.2 4.5
    # 3 4.0 TRUE FALSE 5.0 3.0 3.0
    # 4 2.9 TRUE FALSE 4.7 4.0 2.9
    # 5 2.0 FALSE TRUE 3.0 3.0 3.0

    关于R - 使用带有逻辑值的开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27941641/

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