You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何assert_that提示断言需返回逻辑值,但all(between(...))已返回单个逻辑值?

问题原因

你错误地使用了%>%管道符将数据框传递给assert_that,但assert_that的第一个参数要求是单个逻辑值,而非数据对象。

当执行data %>% assert_that(all(between(Var 1, 0, 1)))时,管道符会自动把左侧的data作为第一个参数传给assert_that,等价于运行:

assert_that(data, all(between(`Var 1`, 0, 1)))

这里第一个参数是tibble类型,不是逻辑值,因此触发了assert_that: assertion must return a logical value错误。

解决方案

有两种常见的修正方式:

方式1:直接引用数据框变量(不用管道)

直接在断言中明确指定数据框的列,无需依赖管道传参:

library(assertthat)
library(tidyverse)

data <- tibble(`Var 1` = c(0.1, 0.2, 0.5), `Var 2` = c(0.1, 2, 5))

assert_that(all(between(data$`Var 1`, 0, 1)))

方式2:使用%$%管道(暴露数据框列)

如果习惯用管道风格,可以使用magrittr包的%$%管道(tidyverse已包含该包),它会将数据框的列直接暴露在当前环境中,无需额外引用数据框:

library(assertthat)
library(tidyverse)

data <- tibble(`Var 1` = c(0.1, 0.2, 0.5), `Var 2` = c(0.1, 2, 5))

data %$%
  assert_that(all(between(`Var 1`, 0, 1)))

内容的提问来源于stack exchange,提问作者Michael A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:10:00