使用lubridate的R apply()函数出错

时间:2012-10-18 02:52:48

标签: r

我有一个像这样的简单函数:

f<-function(x){ ymd_h(x[1]) + (x[2] )}

我在ymd_h(), hours()包中使用lubridate。但是当我尝试从apply这样的方法调用此函数时:

result<-apply(wind.new[,c("date","hors")],1,f)

...其中*wind.new是包含datehors和其他列的数据框, 我收到以下错误:

Error in FUN(newX[, i], ...) : could not find function "ymd_h"

显然ymd_happly()不可见。我该如何解决这个问题? 更新:  实际上我有下面显示的数据框,并希望将日期列转换为YYYYMMDDHH格式,并将 hors 列添加为小时。我认为最好的方法是使用lubridate包,我使用上面提到的功能。但执行花了很长时间,输出不正确。有什么提示吗?

   date    hors   u      v        ws    wd
2009070100  1   2.34    -0.79   2.47    108.68
2009070100  2   2.18    -0.99   2.4     114.31
2009070100  3   2.2     -1.21   2.51    118.71
............
2009070100  47  2.3     -2.18   3.17    133.5
2009070100  48  1.93    -1.87   2.69    134.12
2009070112  1   2.77    -0.65   2.85    103.17

.........

1 个答案:

答案 0 :(得分:1)

我确信@DrewSteen关于将lubridate包加载到搜索路径上的评论是正确的。

我认为您的功能会出现问题,因为apply会强制转换为矩阵,并会返回错误的类型(需要更多强制措施)

更改函数以将日期时间和小时数据作为单独的参数应该有所帮助。

library(lubridate)
f <- function(date, hours){ymd_h(date) + hours(hours)}

result <- with(wind.new, f(as.character(date), hors))

ymd_h会很慢,因为它必须猜测日期/时间的格式。