data.table ifelse行为的问题

时间:2011-08-31 18:35:11

标签: r if-statement data.table

我正在尝试使用data.table计算一个简单的比率。不同的文件具有不同的tmax值,因此这就是我需要ifelse的原因。当我调试它时,dt看起来很好。 tmaxValue是单个值(在这种情况下遇到第一个“t = 60”),但t0Value是dt中的所有“t = 0”值。

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的{​​{1}}除了所有tmaxValue的所有Result,但我想要的是每个唯一t0Value的单一比率。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您没有提供可重现的示例,但通常使用ifelse是不对的。

请尝试使用if(...) ... else ...

ifelse(test, yes, no)行为非常奇怪:它使用test中的属性长度以及来自yes的值生成结果或no。 ...所以在你的情况下,你应该得到没有属性和长度的东西 - 这可能不是你想要的,对吗?

[更新] ......嗯,也许是因为你说tmaxValue是一个单一的价值...... 那么问题不在于计算tmaxValue?请注意,ifelse仍然是错误的工具...