2010-12-17 40 views
0

的功能我沒有R中很多經驗,所以糾正我,如果我做一個基本錯誤:問題傳遞數據中的R

我有一個函數:

ctree_result <- function(yval, training, testing) { 
    print(yval) 
    trained_tree <- ctree(formula = ordered(yval) ~ ., subset=training, data=ealls) 
    print("here") 
    tree_cor <- cor(yval[testing], as.numeric(predict(trained_tree, ealls[testing]))) 
    c_mat <- rbind(yval[testing], as.numeric(predict(trained_tree, ealls[testing]))) 
    tree_kappa <- cohen.kappa(t(c_mat)) 
    return(c(tree_cor, tree_kappa)) 
} 

當我稱之爲(與任何數據,但例如):

ctree_result(emean.data$mean.Shape, 1:70, 71:80) 

我得到錯誤Error in factor(x, ..., ordered = TRUE) : object 'yval' not found。但是,第一個打印語句有效,矢量打印出來。第二個打印語句從不運行。 yval似乎不會傳遞給ctree。

yval <- emean.data$mean.Shape 
sauc_tree = ctree(formula = ordered(yval) ~ . , data=ealls) 

,沒有任何問題:

我可以爲手動運行ctree功能。 eallsemean.data是我之前定義的全局數據集。

+0

emean.data $ mean.Shape包含什麼? – Shane 2010-12-17 19:54:30

+0

80個整數的向量。 – tkerwin 2010-12-17 19:56:58

+0

查看我的更新。由於懶惰的評估,你可能會遇到問題。你傳遞的是表達式'emean.data $ mean.Shape',而不是它的值。你可能需要首先用'eval'函數來評估它。 – Shane 2010-12-17 19:59:36

回答

3

您的問題與ctree函數。數據ealls不是從您的參數提供的,所以我認爲這是一個全局數據集。該公式正在尋找ealls數據集中名爲yval的字段。如果要使用函數參數中的yval值,則應該將其設置爲ctree中的數據字段,並確保它具有公式的命名列。

正確使用方法的一個例子是這樣的(這是不完整的代碼):

ctree.result <- function(emean.data, ...) { 
    trained_tree <- ctree(formula = ordered(mean.Shape) ~ ., subset=training, data=emean.data) 
    ... 
} 

哪裏emean.data是一個叫mean.Shape列數據集。

我建議你看看help(ctree)並遵循任何提供的例子,看看應該如何使用它。

編輯

正如在聊天討論,你可以嘗試調用ctree之前將額外的數據添加到數據集。公式期望數據在數據集中。

+0

我想要改變參數yval來根據傳遞給ctree_result的值修改傳遞給'ctree'函數的公式。例如,在「mean.Shape1」,「mean.Shape2」等上運行它。「mean.Shape」列與「ealls」不在同一個數據集中。 – tkerwin 2010-12-17 19:51:03

+0

根據您的建議,我將yval作爲列臨時添加到數據集並傳遞到整個數據集中。儘管我還有更多的錯誤需要解決,但是我沒有辦法擺脫這個錯誤。 – tkerwin 2010-12-17 22:10:50

0

一個靈活的解決方案是創建一個公式,其中包含您實際將要使用的變量的名稱。下面是使用lm功能重複的例子:

lm_result <- function(yvar){ 
    fla <- as.formula(paste(yvar, " ~ Species")) 
    lm(fla, data=iris) 
} 

lm_result("Petal.Length") 

請注意,您必須通過變量的名稱,而不是變量本身的這種做法。

+0

他的變量有它的數據,而不是列名... – Shane 2010-12-17 21:33:58

+0

@Shane是的,我建議他改變它。我在描述中沒有看到需要傳遞變量的任何內容。 – Aniko 2010-12-17 22:09:15

+0

@Shane噢,你的意思是變量甚至不在數據集中。我錯過了那部分。 – Aniko 2010-12-17 22:32:19