2017-07-24 42 views
1

我正在嘗試創建一個函數,它需要在一個集合列表中選擇最高的250個最低項。但是,當我運行完整的代碼時,出現了一個錯誤,所以我認爲這個錯誤可能在函數的某個地方選擇最低的術語。嘗試選擇250個最低項R

下面是代碼:

selFun <- function(x) 
{x == (order(x, decreasing = FALSE)[1:250]) 
} 

這是有點,我想實現爲x數據的列表:

 TSPAN6   TNMD   DPM1   SCYL3  C1orf112   FGR   CFH 
    9.533633e-01 2.546213e-05 2.868157e-03 2.519265e-02 7.661085e-01 3.308286e-02 7.419554e-09 
     FUCA2   GCLC   NFYA   STPG1   NIPAL3   LAS1L   ENPP4 
    8.119698e-11 3.273434e-03 6.048925e-04 2.264826e-03 2.319325e-02 3.065685e-03 4.675599e-02 
+1

我認爲你要'rank'不'order' – G5W

回答

1

你可以使用order

selFun <- function(x) { 
    x <- x[order(x, decreasing = FALSE)[1:250]] 
    x 
} 

sort

selFun <- function(x) { 
    x <- sort(x, decreasing = FALSE)[1:250] 
    x 
} 

提取最低的250個值。

注意:您在Q中使用了x == ....。要將值賦給x,請使用<-。有關更多信息,您應該檢查?Comparison?assignOps
此外,您必須在函數中返回結果。這可以通過return(x)或通過簡單地將對象放在末尾來實現(在這些示例中,我只需將x放在函數的最後一行)。

測試:使用

10值矢量(和減少的位數返回到5):

x <- 10:1 

兩個函數都返回

selFun(x) 
# [1] 1 2 3 4 5 

EDIT

如果要創建指示這些250個最低值,可以使用這些值是這樣的邏輯矢量:

x %in% selFun(x) 

其給出(與上面提到的10個值的例子):

# [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 
+0

我想前250到被標記真實的,其餘的假 – merryberry

+0

這就是爲什麼我用==。但是,只有一個出現TRUE。我想要250這樣出來 – merryberry

+0

我明白了,儘管我認爲 – merryberry

0

您也可以使用dplyr軟件包和arrange。我對dplyr包真正熱衷:

arrange(iris, Petal.Length)[1:10, ]