0

我在 R 中使用 for 循环时遇到问题。以下代码

a <- seq(-2, 5)
for(i in 1:length(a)){
  a[i] <- if(a[i] <= 0) "aa" else a[i]
}

应该导致以下向量

> a
[1] "aa" "aa" "aa" "1"  "2"  "3"  "4"  "5"

相反,我们得到以下结果:

> a
[1] "aa" "-1" "aa" "1"  "2"  "3"  "4"  "5" 

为什么R不能用“aa”替换“-1”?

我们尝试了另一种效果很好的解决方案:

a <- seq(-2, 5)
b <- NULL
for(i in 1:length(a)){
  b[i] <- if(a[i] <= 0) "aa" else a[i]
}

它产生预期的结果:

> b
[1] "aa" "aa" "aa" "1"  "2"  "3"  "4"  "5" 

为什么后一个示例可以正常工作而第一个示例不行?

非常感谢您的帮助!

此致!!

4

1 回答 1

4

整理顺序可能与您(或 Matthew)所理解的不同。字符“-”在您的操作系统的词汇顺序中可能不会更低。字符串比较是特定于操作系统的。(请参阅?Comparison)第一次替换后,整个向量被强制转换为字符,如果"-" > 0在您的机器上返回 TRUE,那么您就有了答案。我敢打赌,这段代码会如你所料:

a <- seq(-2, 5)
for(i in 1:length(a)){
  a[i] <- if( as.numeric(a[i]) <= 0) "aa" else a[i]
}

我怀疑 Henrik 的建议也应该符合您的期望,因为它会首先从数字比较中创建一个逻辑向量,然后从 "aa" 和a.

(在第二种情况下,没有将向量强制转换为字符。)

于 2013-11-13T23:33:36.033 回答