【发布时间】:2018-05-25 16:35:12
【问题描述】:
我有一个包含函数 IF 的自定义函数。当我在 data.table 中使用该函数时,我收到一条警告说 “条件的长度 > 1,并且只使用第一个元素”。
我认为该功能可能会根据需要应用于列中的所有行而不是一次一行,但我不确定。
有人知道为什么会出现这个警告吗?
我的功能是:
HeatIndex<-function(TempC,RH)
{
TFarheit= TempC * 1.8 + 32
if( TFarheit <80 ) {
Te=TempC /15
HI = Te/15
} else {
TA=TempC /11
HI = TA/125
}
HI= (HI - 32) / 1.8
return(HI )
}
数据样本:
HeatINDEX=data.table(Ave_MeanRH=c(0,100), Ave_MeanT=c(10,20)) #create data.table
并将函数应用于数据
HeatINDEX[,HI:=HeatIndex(HeatINDEX$Ave_MeanT, HeatINDEX$Ave_MeanRH)]
【问题讨论】:
-
“快速”解决方案是指定您希望它应用于
by中的每一行:HeatINDEX[,HI:=HeatIndex(Ave_MeanT, Ave_MeanRH), by = 1:nrow(HeatINDEX)] -
通常最好使用
ifelse进行此类比较,而不是if。见stackoverflow.com/questions/17252905/else-if-vs-ifelse -
使用“by”参数仍然保持警告。在更大的数据库中,将函数运行到所有行需要很长时间
标签: r function data.table sapply