【问题标题】:How can R considers a string as negative?R如何将字符串视为负数?
【发布时间】:2013-11-12 05:50:24
【问题描述】:

请考虑以下事项

string_1 = "??????????"
string_2 = " bob"
string_3 = "_bob_"
string_1 < 0
# [1] TRUE
string_2 < 0
# [1] TRUE
string_3 < 0
# [1] TRUE

但是

string_4 = "bob"
string_4 < 0
# [1] FALSE

为什么字符串被 R 视为负值?是否有任何特定字符将字符串变为负值?如果是这样,我怎样才能消除字符串向量被视为负数?

【问题讨论】:

  • @MatthewLundberg 说什么以及 ?'==' 说什么:“如果两个参数是不同类型的原子向量,则一个被强制转换为另一个的类型,即(递减)优先顺序是字符、复数、数字、整数、逻辑和原始。”
  • 这也是"1" &lt; "10" &lt; "2"的原因
  • 来吧,伙计们……这并不难。 "?" &lt; "0" [1] TRUE"_" &lt; "0" [1] TRUE" " &lt; "0" [1] TRUE。 “0”不是

标签: r negative-number


【解决方案1】:

这只是一个字母排序顺序。

"b" < 0
### [1] FALSE
"?" < 0
## [1] TRUE

这些与"0" 相比如何; 0 的字母排序转换为 character。同样:

"hello" > "goodbye"
## [1] TRUE

【讨论】:

  • 我怎样才能清理字符串以确保它是积极的呢?我对包igraph 的功能有疑问,它不接受id 为负值(即使它是一个字符)。然后我想我必须将几个“负”值转换为“正”......
  • 嗨@CptNemo。如果您有后续问题,欢迎您提出新问题。在 cmets 中询问后续行动很麻烦(对于回答者而言),难以遵循(对于社区而言)并且强烈反对
  • 好吧,我的后续问题是我主要问题的一部分。假设这是一个善意的提醒...... :-)
  • 是的,当然它“看起来”只是检查第一个字符。查看任何字典。
  • 如果你想确保string &gt; "0",为什么不直接string &lt;- paste0(1,string)? (在任何合理的字典顺序中,1 必须在 0 之后,对吧?)
【解决方案2】:

是否有可能,您的 string_1 实际上不是由问号字符组成,而是由一些不可打印的字符组成,其中第一个字符的 ascii 值

因为我的简短实验表明,R 将 0 提升为“0”,然后对 2 个字符串进行字典比较。

"4aaaa" < 5
# [1] TRUE

"6bbbb" < 5
# [1] FALSE

0 并不特殊,因为字符串不是数字。

【讨论】:

  • 我们为什么要问“有没有可能,you[r] string_1 实际上不是由问号字符组成”?
  • 因为“?”是 ascii 码 63,而“0”是 48。因此,由真正的问号组成的 sting_1 将大于 0。如果你有 R 方便,你可以自己检查。
  • 这可能取决于语言环境。在我的设置和这个互联网盒子 (compileonline.com/execute_r_online.php) 上“?”整理为 ascii,因此大于零。
  • 参见?"&lt;":“诸如 en_US 之类的语言环境的整理顺序通常不同于 C(应该使用 ASCII)并且可能会令人惊讶。”
  • 然而,'?'是不可打印字符的常见占位符。 (OP 对他的语言环境只字未提,顺便说一句,所以人们可以假设任何情况)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2022-08-12
  • 2020-02-23
相关资源
最近更新 更多