缺少逻辑中引入的值

时间:2016-04-19 10:55:22

标签: r logic

我正在处理名为ggplot2的内置数据集(diamonds)。分配到dia1后,我执行了以下脚本,以便根据克拉值对值进行分组。我收到了关于强制引入NAs的消息。我不明白这是怎么发生的,因为is.na()向量的总和等于零也是显而易见的。

#data
library(ggplot2)
dia1 <- diamonds

#logic
x<-1
dia1$carat<-as.character(dia1$carat)
for (i in 1:(length(dia1$carat))){

if (0<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=1){
  dia1$carat[x]<-"0-1"
}
if (1 < (as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x])) <= 2){
  dia1$carat[x]<-"1-2"
}
if (2<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=3){
  dia1$carat[x]<-"2-3"
}
if (3<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=4){
  dia1$carat[x]<-"3-4"
}
if (4<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=5){
  dia1$carat[x]<-"4-5"
}
  x<-x+1
}
  

if(0&lt;(as.numeric(dia1 $ carat [x]))&amp;   (as.numeric(dia1 $ carat [x]))&lt; :缺少值TRUE / FALSE   需要另外:警告信息:1:强制引入的NAs   2:强制引入的NA

# check if there are any NAs in the data
sum(is.na(dia1$carat))
[1] 0

或者,当NAs向量明确强制转换为某个字符时,为什么没有引入dia1$carat,但在后向转换中引入了NAs

1 个答案:

答案 0 :(得分:2)

问题是我们正在向if()提供 NA ,请尝试以下示例:

if(NA > 1){1} else {2}
  

if(NA> 1){:缺少值需要TRUE / FALSE

时出错

在您的情况下,如果我们认为第一行 carat "0.23",则第一行if()语句在将其转换为数字后正确评估它,然后如果在范围内指定一个新值"0-1"。然后第二个if()正在尝试将"0-1"转换为数字,因此我们得到NA

关于代码的其他建议:

  • 只需使用cut()
  • 即可
  • 使用if(){...} else if(){...} ...
  • 我不知道为什么我们有x变量,我们可以使用i代替。
  • 了解seq_along()summary()str()
  • as.numeric(dia1$carat[x])
  • 使用临时变量
  • 使用空格