运算符在 test_that 函数中不起作用

Operator does not work in test_that function

我正在尝试在 R 中编写一个 test_that 函数,我在其中测试数据框的维度是否等于使用“||”的行和列的两种组合之一操作员。但是,它返回“类型不兼容:整数不合逻辑”的错误。甚至可以使用“||” 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 和像 || 这样的逻辑运算符一起使用不是一个明确的选择;而 ==0 ~ FALSE!=0 ~ TRUE(尝试 if (-1) 1 else 2(0) 相同),我不会依赖它。

  2. 您正在混合功能。 expect_equal 有两个参数,要么通过要么失败。为此,您将 dim(data_frame) 作为第一个参数传递,而当您打算将 c(60,2) 作为第二个参数时,您的第二个参数被 解析 c(60, 2) || dim(data_frame),这是错误的,有几个原因,即 || 没有矢量化,它必须将 length-1 与 length-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))) 成功了!