-1

次のような単純な関数があります。

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

ここではパッケージymd_h(), hours()から使用します。lubridateしかし、次applyのようなメソッドからこの関数を呼び出そうとすると:

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

... whereは、およびその他の列*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

lubridate パッケージを検索パスにロードすることに関する @DrewSteen のコメントは正しいと確信しています。

マトリックスに強制し、間違った型を返すため、関数に問題があると思います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 に答える