2014-05-13 79 views
-3

我有2個問題:R陀n個結果

  1. 設計出接收參數N(整數)動態R代碼裏面功能和L(字符列表) 然後執行下列操作: 構建謂詞與OR運算符作爲動態的數量N. 舉例來說,如果N = 2,謂詞將是:data.clean.test[j,c(L[[1]])] == TRUE OR data.clean.test[j,c(L[[2]])] 或者如果N = 3,將是 data.clean.test[j,c(L[[1]])] == TRUE OR data.clean.test[j,c(L[[2]])] == TRUE OR data.clean.test[j,c(L[[3]])] == TRUE 等.. 。

  2. 選擇從一個未前N個結果排序

任何想法(0和1之間的概率)的小數列表?這不是功課,但真正的預測性分析使用案例......

+2

請提供一些示例數據和您所需的輸出,如下所述:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

回答

0

假設你的數據看起來有點像這個

set.seed(104) 
dd<-data.frame(
    a=sample(c(T,F),25, replace=T), 
    b=sample(c(T,F),25, replace=T), 
    c=sample(c(T,F),25, replace=T), 
    d=sample(c(T,F),25, replace=T), 
    prob = runif(25) 
) 

collist<-list("a","c","b") 

然後這將做你想做的第一部分中的功能是

myfun<-function(N) { 
    rowmatches <- apply(as.matrix(dd[, unlist(collist[1:N])]), 1, any) 
    dd[rowmatches, ] 
} 

有沒有需要動態地構建一個謂詞列表,在這裏我們只提取你是從在data.set要求列,把它變成一個矩陣,然後我們使用apply可以跨行中的值查看是否有任何值。然後我們返回匹配的行。所以

myfun(1) 
# nrow(myfun(1)) == sum(dd$a==T) 
# TRUE 

返回列a爲真的所有行。並且

myfun(2) 
# nrow(myfun(2)) == sum(dd$a==T | dd$c==T) 
# TRUE 

返回列「a」或「c」爲真的所有行。

然後,如果你想抓住在列表頂部的值,你可以這樣做

result<-myfun(2) 
head(result[order(result$prob),], 3) 
#  a b  c  d  prob 
#15 FALSE TRUE TRUE FALSE 0.08670653 
#14 TRUE TRUE FALSE FALSE 0.12188057 
#16 TRUE TRUE TRUE TRUE 0.13206675 

在您使用order()排序的data.frame和使用head()提取一定數量的行(在這種情況下是3)。

0

也許......猜測data.clean.test是一個函數,而不是一個數據對象:

any(sapply(L , data.clean.test, j) 

或者如果猜測是錯了,「J」是在工作區中一個常數,那麼:

any(sapply(L, function(x) data.clean.test[ j, x]) 

any功能測試任何TRUE(或強制轉換爲TRUE)值。這意味着無論是「==」或any會給出一個真相「值的TRUE的數值不等於0或邏輯TRUE。

相關問題