R,ifelse只返回一个值

use*_*507 1 if-statement r

我有一个数据框如下.

test <- data.frame (myrank = c(0.9629,0.1296), poster = c("dial","bear"))
test
##  myrank poster
## 1 0.9629   dial
## 2 0.1296   bear
Run Code Online (Sandbox Code Playgroud)

我有一个ifelse函数如下,但它只返回一个值,我无法弄清楚为什么.

color <- function (x){
    x$colorchip <- ifelse((((x$myrank> 0) | (x$myrank= 0)) & x$myrank < 0.143),
                          "#FF0000",
                          ifelse((x$myrank > 0.143 & x$myrank < 0.286),
                                 "#FF1919",
                                 ifelse((x$myrank > 0.286 & x$myrank < 0.428571),
                                        "#FF3333",
                                        ifelse((x$myrank > 0.428571 & x$myrank < 0.571429),
                                               "#FFFFFF",
                                               ifelse((x$myrank > 0.571429 & x$myrank < 0.714286),
                                                      "#3333D6",
                                                      ifelse((x$myrank > 0.714286 & x$myrank < 0.857143),
                                                             "#1919D1",
                                                             "#0000CC"
                                                      ))))))
    return(x$colorchip)
}


color(test)
## [1] "#FF0000" "#FF0000"
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里缺少什么.任何建议将不胜感激!

Ben*_*ker 8

@MarkHeckmann已经确定了您的具体问题,但我建议使用此功能:

color <- function (x){
     cols <- c("#FF0000","#FF1919","#FF3333",
               "#FFFFFF","#3333D6","#1919D1",
               "#0000CC")
     i <- findInterval(x,c(0,0.143,0.286,0.428571,0.571429,
                             0.714286,0.857143,Inf))
     cols[i]
 }
 test <- data.frame (myrank = c(0.9629,0.1296),
                     poster = c("dial","bear"))
 color(test$myrank)
 ## "#0000CC" "#FF0000"
Run Code Online (Sandbox Code Playgroud)

如果用的是切换点,您的代码可能更容易阅读(0:7)/7.您可能还会发现该?colorRamp功能很有用......