Проблема с поведением data.table ifelse - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь вычислить простое соотношение, используя data.table. Разные файлы имеют разные значения tmax, поэтому мне нужно ifelse. Когда я отлаживаю это, DT выглядит хорошо. tmaxValue - это одно значение (первое «t = 60», встречающееся в этом случае), но t0Value - это все значения «t = 0» в dt.

summaryDT <- calculate_Ratio(reviewDT[,list(Result, Time), by=key(reviewDT)])

calculate_Ratio <- function(dt){
tmaxValue <- ifelse(grepl("hhep", inFile, ignore.case = TRUE), 
    dt[which(dt[,Time] == "t=240min"),Result],
    ifelse(grepl("hlm",inFile, ignore.case = TRUE), 
        dt[which(dt[,Time] == "t=60"),Result],
        dt[which(dt[,Time] == "t=30"),Result]))
t0Value <- dt[which(dt[,Time] == "t=0"),Result]
return(dt[,Ratio:=tmaxValue/t0Value])
}

То, что я получаю, это Result для tmaxValue, разделенное на все Result для всех t0Value, но мне нужно одно соотношение для каждого уникального by.

Спасибо за помощь.

1 Ответ

1 голос
/ 31 августа 2011

Вы не предоставили воспроизводимый пример, но обычно использование ifelse - неправильная вещь.

Попробуйте использовать if(...) ... else ....

ifelse(test, yes, no) действует очень странно: он выдает результат с атрибутами и длина из test и значениями из yes или no. ... так что в вашем случае вы должны получить что-то без атрибутов и длины один - и это, вероятно, не то, что вы хотели, верно?

[ОБНОВЛЕНИЕ] ... Хм или может быть, так как вы говорите, что tmaxValue это одно значение ... Тогда проблема не в расчете tmaxValue? Обратите внимание, что ifelse по-прежнему не подходит для работы ...

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