运算符在 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))
})
numeric
和像 ||
这样的逻辑运算符一起使用不是一个明确的选择;而 ==0 ~ FALSE
和 !=0 ~ TRUE
(尝试 if (-1) 1 else 2
和 (0)
相同),我不会依赖它。
您正在混合功能。 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)))
成功了!
我正在尝试在 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))
})
numeric
和像||
这样的逻辑运算符一起使用不是一个明确的选择;而==0 ~ FALSE
和!=0 ~ TRUE
(尝试if (-1) 1 else 2
和(0)
相同),我不会依赖它。您正在混合功能。
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)))
成功了!