-1

我有一个像这样的简单功能:

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_h是看不到里面apply()的。我将如何解决这个问题?更新:实际上我有下面显示的数据框,并希望将日期列转换为 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

…………

4

1 回答 1

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会很慢,因为它必须猜测日期/时间的格式。

于 2012-10-18T03:17:31.640 回答