我有一个像这样的简单函数:
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
是包含date
,hors
和其他列的数据框,
我收到以下错误:
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
.........
答案 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
会很慢,因为它必须猜测日期/时间的格式。