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

如何测试fct_na_value_to_level()函数的执行结果?

如何测试fct_na_value_to_level()的执行结果

fct_na_value_to_level()的默认行为是将NA替换为非字符类型的NA水平,常规缺失值检测方法(如is.na()、== NA)无法识别这个特殊水平,给测试带来了困扰。以下是测试示例及问题表现:

library(forcats)
library(dplyr)
# 手动指定替换值为'x'的情况
letters[1:3] %>% factor %>% fct_na_value_to_level('x')
#> [1] a b c
#> Levels: a b c x

# 默认替换为NA水平的情况
a = c("foo", "bar", NA) %>% fct_na_value_to_level()
a[3]
#> [1] <NA>
#> Levels: bar foo <NA>

a[3] %>% dput()
#> structure(3L, levels = c("bar", "foo", NA), class = "factor")

# 常规检测方法失效
a[3] %>% is.na()
#> [1] FALSE
a[3]==NA
#> [1] NA
a[3]=="NA"
#> [1] FALSE

可行的测试方法

可以通过以下几种方式正确验证该函数的执行结果:

  • 检查因子水平是否包含NA:直接查看levels属性,确认NA水平是否被添加

    # 验证是否成功添加NA水平
    expect_true(any(is.na(levels(a))))
    
  • 通过位置匹配特殊水平:利用因子的整数编码定位对应水平

    # 验证第3个元素对应的是NA水平
    expect_equal(levels(a)[a[3]], NA)
    
  • 对比完整因子结构:直接对比目标因子的完整结构(含水平和编码)

    target <- factor(c("foo", "bar", NA), levels = c("bar", "foo", NA))
    expect_identical(a, target)
    
  • 使用forcats::fct_match:该函数可正确匹配包含NA的因子水平

    expect_true(fct_match(a[3], NA))
    

内容的提问来源于stack exchange,提问作者Dan Chaltiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:22:15