Проблема передачи данных для функции в R - PullRequest
0 голосов
/ 17 декабря 2010

У меня нет большого опыта в 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. Тем не менее, первый оператор печати работает, вектор распечатывается. Второе утверждение print никогда не выполняется. yval не похоже, что он пропущен через ctree.

Я могу запустить функцию ctree вручную как:

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

без проблем. ealls и emean.data - это глобальные наборы данных, которые я определил ранее.

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Ваша проблема с функцией ctree.Данные ealls не поступают из ваших параметров, поэтому я предполагаю, что это глобальный набор данных.Формула ищет поле с именем yval в наборе данных ealls.Если вы хотите использовать значение 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 голосов
/ 18 декабря 2010

Гибким решением является создание формулы, содержащей имя переменной, которую вы фактически собираетесь использовать.Вот воспроизводимый пример с использованием функции lm:

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

lm_result("Petal.Length")

Обратите внимание, что для этого подхода необходимо передать имя переменной вместо самой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...