繁体   English   中英

运算符在 test_that function 中不起作用

[英]Operator does not work in test_that function

我正在尝试在 R 中编写一个 test_that function 测试数据框的尺寸是否等于使用“||”的行和列的两种组合之一操作员。 但是,它返回“类型不兼容:integer 不合逻辑”的错误。 甚至可以使用“||” expect_equal() 中的运算符?

请参阅下面的示例代码。

test_that('data frame has correct number of rows and columns'){
expect_equal(dim(data_frame), c(60, 2) || dim(data_frame), c(60,1))
})
  1. numeric和逻辑运算符,如|| 不是一起使用的明确选择; while ==0 ~ FALSE!=0 ~ TRUE (尝试if (-1) 1 else 2(0)相同),我不会依赖它。

  2. 您正在混合功能。 expect_equal需要两个 arguments 并通过或失败。 为此,您将dim(data_frame)作为第一个参数传递,虽然您打算将c(60,2)作为第二个参数,但您的第二个参数被解析c(60, 2) || dim(data_frame) c(60, 2) || dim(data_frame) ,这是错误的有几个原因,即|| 未矢量化,它必须将长度 1 与长度 1 进行比较。 而且您正在发送第三个参数c(60,1) ,它被直接传递给底层调用compare ... 但它没有被用作比较值。

    我的推断是您希望dim(data_frame) same as c(60,2)或 ( dim(data_frame) same as c(60,1) ,但您选择的语法对于 R 根本不合法,很多在expect_equal中更少。

我建议作为替代方案:

expect_true(identical(dim(data_frame), c(60L,2L)) ||
              identical(dim(data_frame), c(60L,1L)))

还有另一种方式,有两个测试:

expect_equal(nrow(data_frame), 60L)
expect_true(ncol(data_frame) %in% 1:2)

似乎expect_true(c(dim(data_frame), c(60, 2)) || c(dim(data_frame), c(60,1)))有效!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM