2010-12-17 55 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