首页 > 解决方案 > 在我的 R 代码中观察到异常的逻辑不一致

问题描述

要学习/记住的东西。

寻找避免此类错误的提示。

在编写大(ish)R代码来遍历许多数据文件并创建数据摘要时,我想使用:

File_data$name[p] %in% nr_counter$NAME

这应该基本上检查字符(名称)是否File_data$name[p]属于. 但令我惊讶的是,该命令无法解决。我不知道为什么。我得到的唯一线索是测试:NAMEnr_counter

File_data$name[p] == "Bohuslav Diviš"

当它应该为 TRUE 时返回 FALSE(文本是“Bohuslav Diviš”)。

以下是我上传的更多代码输出,用于测试对象的类型和控制台中的一些逻辑不匹配

> File_data$name[p] %in% nr_counter$NAME
[1] FALSE
> File_data$name[p]
[1] "Bohuslav Diviš"
> nr_counter$NAME
[1] "qwert"          "Bohuslav Diviš"
> nr_counter$NAME[2]
[1] "Bohuslav Diviš"
> File_data$name[p] == nr_counter$NAME[2]
[1] FALSE
> "Bohuslav Diviš" %in% nr_counter$NAME
[1] TRUE
> "Bohuslav Diviš" == File_data$name[p]
[1] FALSE
> File_data$name[p] == "Bohuslav Diviš"
[1] FALSE
> typeof(File_data$name[p])
[1] "character"
> typeof(nr_counter)
[1] "list"
> typeof(nr_counter$NAME)
[1] "character"
> nr_counter
            NAME        COUNTRY COUNTER
1          qwert          asdfg       1
2 Bohuslav Diviš Czechoslovakia       1
> as.character(File_data$name[p]) %in% as.character(nr_counter$NAME)
[1] FALSE

由于名称中的特殊字母“š”,这可能是一个问题吗?

我认同。基于我所做的以下更改:

> File_data$name[p] = "Bohuslav Divis"
> nr_counter$NAME[2] = "Bohuslav Divis"
File_data$name[p] %in% nr_counter$NAME
[1] TRUE

我想如果我恢复到带有“š”的名称,那么如果单独的特殊字母引起问题,那么这个逻辑测试应该是 FALSE。这是结果:

> nr_counter$NAME[2] = "Bohuslav Diviš"
> File_data$name[p] = "Bohuslav Diviš"
> File_data$name[p] %in% nr_counter$NAME
[1] TRUE

如上所示,没有获得 FALSE。因此,现在我对如何在运行大量数据的代码中进行测试感到困惑。

感谢您的耐心等待,希望这一观察能激怒您的创意中心。

干杯...

标签: rdebugginglogical-operators

解决方案


推荐阅读