2017-06-04 37 views
0

我有一個從csv創建的數據集(僱員),它顯示如下所示的數據;使用sapply的數據集和UDF

employee[1,] 

age name designation 
28 Tony Manager 

我已經創建了返回基於輸入參數的決定的功能;

loan_eligible_decision <- function(p) 
{ 
    if(p$designation == "manager") 
    { 
    decision <- "yes" 
    } 
    return(decision) 
} 

當函數被直接調用時,它工作正常,並給出下面的結果;

loan_eligible_decision(employee[1,]) 

gives me output: yes 

但是,當在sapply家族中調用它時會拋出一個引用錯誤;

sapply(data.frame(employee[1,]),loan_eligible_decision(x)) 

Error in p$marital : $ operator is invalid for atomic vectors 

有什麼建議可能是一種可能的解決方法/解決方案?

我也嘗試更換if條件;

if(p[[designation]] == "manager") 

並要求這樣的功能;

sapply(employee['1',],loan_eligible_decision(x)) 

The error: 
Error in loan_eligible_decision(x) : object 'designation' not found 
+0

這是錯誤的方法來應用它。對於rowwise操作,您需要使用'apply'和'margin = 1'。然而這並不是最好的方法。矢量化方法(在這種情況下使用'ifelse')是最好的選擇。你也不需要在這裏進行rowwise操作。 – Sotos

回答

0

您正在錯誤地調用該功能。它應該是

myfun <- function(x) x^2 

sapply(xy, FUN = myfun) 

在任何情況下,請嘗試將函數內的browser()呼叫,並檢查到底是怎麼回事。有關更多信息,請參閱?browser

myfun <- function(x) { 
    browser() 
    x^2 
} 
+0

我嘗試這樣做,仍然面臨一個問題:'X <-employee [1,]'' X [4]' _designation_ _1 manager_ '申請(X,如圖4所示,函數(X) { 如果(X $名稱== 「經理」) { 決策< - 「是」 }否則{ <決定 - 「無」 } 回報(決定)})' 錯誤: '錯誤,如果(D2 == 0L){:缺少值,其中TRUE/FALSE需要' – Avin

+0

@Avin我還是不明白你爲什麼不使用'ifelse(df $指定=='經理','是','否')'。就你的'apply'而言......許多事情都是錯誤的,以'4'作爲餘量開始,'if'語句使用'<-',其中'deision'定義在哪裏?等等 – Sotos

+0

謝謝@sotos。只是爲了澄清我試圖看看dataframe + UDF + sapply集成的可能性以及它們的兼容性,我相信ifelse會給我結果,所以我已經做出了您所建議的更改,但我想知道如何應用使用相同的數據。我遇到了以下錯誤: '錯誤在if(d2 == 0L){:缺少值,其中TRUE/FALSE'當前代碼:'apply(x,4,function(x){ifelse(x $ marriage =='經理','是','否')})' – Avin