WedX - журнал о программировании и компьютерных науках

Объект R не найден, хотя возвращается с использованием печати

Я не понимаю вывод R. Похоже, мой четко определенный объект outcome не найден, хотя он успешно используется в подфункциях и печатается. Как это возможно?

Мой R-код:

f.hazardratio <- function(input)
{
    outcome <- c("A","B","C","D","E","F")
    category <- c(rep("surv",2),rep("term",2),rep("lobw",2))

    for(i in 1:length(outcome))
        {               
            if(nrow(subset(input,input[,paste("out",category[i],sep=".")]==outcome[i]))>0)
                {
                    lex <- f.lexis(data=input,
                                   out=category[i],
                                   out.case=outcome[i])
                    print(str(lex))
                    print(outcome[i])
                    print(head(subset(lex, lex.Xst=="A")))
                    print(head(subset(lex, lex.Xst==outcome[i])))

# nrow(subset(lex, lex.Xst==outcome[i])) is the value I am actually interest in and causes the same error message as print(), which I only added for identifying the problem
# code continues, but not shown ...

              }
      }
}

И вывод:

 Classes ‘Lexis’ and 'data.frame':  107455 obs. of  6 variables:
  $ pre.time : num
  $ lex.dur : num
  $ lex.Xst : Factor w/ 3 levels
  $ lex.Cst : Factor w/ 3 levels

 [1] "A"

 pre.time lex.dur lex.Xst lex.Cst
 930    145      36  A         vv     
 2255  273      14  A         vv  
 4842  115      99  A         vv  
 5127  260      30  A         vv  
 5217    71    108  A         v    
 5422  152        2  A         vv 

 Error in eval(expr, envir, enclos) (from #32) : object 'outcome' not found

Я уже пытался изменить тип переменных с факторного на символьный или наоборот и пытался определить промежуточную, временную переменную tmp <- outcome[i]. К сожалению, пока ничего не получилось.

r
19.08.2014

  • Можете ли вы привести воспроизводимый пример? Пробовали ли вы какие-либо альтернативные типы подмножеств, например xy <- data.frame(x = runif(10), y = letters[1:10]);mysub <- c("a", "b", "c");xy[xy$y %in% mysub, ]? 19.08.2014
  • В чем проблема? У вас нет доступа к Lex за пределами вашей функции или вы не уверены, почему print(outcome[i]) имеет значение False? exists("string") проверяет, существует ли оцениваемая строка. Переменных "A", "B"...."F" действительно не существует, но ваш код должен работать нормально. 19.08.2014
  • Проблема заключается в пятом операторе печати в цикле, где lex находится в области видимости. outcome[i] — это A, подмножество с A явно работает, подмножество с outcome[i] (которое только что напечатано как A) — нет. 19.08.2014
  • При использовании промежуточной переменной tmp правильный синтаксис будет print(exists("tmp")), а не print(exists(tmp)). 19.08.2014
  • exists(outcome[i]) возвращает FALSE, потому что он проверяет, существует ли A, а не существует ли outcome[i]. Это отвлекающий маневр к общей проблеме. 19.08.2014
  • Я только что продублировал вашу структуру кода и сделал все возможное, чтобы написать недостающие функции и угадать недостающие данные, и я не могу получить подмножество для barf. Учитывая, что в вашем коде хотя бы одна отсутствует закрывающая фигурная скобка, я предполагаю, что мы теряем здесь время. subset может создавать проблемы с областью действия (поэтому я предпочитаю быть явным и использовать квадратные скобки), но вы не дали нам достаточно для воспроизведения. 19.08.2014
  • Да, как писал Spacedman, проблема в том, что подмножество с output[i], элементом вектора символов, не работает, в то время как подмножество непосредственно с A работает. Я попробую явный способ и использую квадратные скобки. 19.08.2014

Ответы:


1

Замена subset() квадратными скобками, предложенная Spacedman, решила проблему.

20.08.2014

2

Добро пожаловать в функциональное программирование. Если вы хотите указать конкретное значение, которое будет возвращено, оберните его в функцию return(.). В противном случае возвращаемое значение является просто результатом последней оценки. Все переменные, созданные внутри функции, будут недоступны извне и впоследствии будут удалены сборщиком мусора. Вызов print может дать вам именно этот объект, а может и не дать. Некоторые авторы сначала передают объект для печати в summary.class (где class является атрибутом объекта) и не возвращают точную копию аргумента.

19.08.2014
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]