1

dv (日の値) と呼ばれる 365x1 のベクターがあります。時間ごとの値 hv を生成する関数を適用しています。私のコードは次のとおりです。

sigma<-0.246*dv
stime<-function(x,y,z){(exp(-(x-12)^2/(2*y^2))+cos(pi*(x-12)/(z-1)))/(2*y*sqrt(2*pi))}
t<-1:24
hv<-NULL
for (i in seq(along=t)){hv<-c(hv,mapply(stime,t[i],sigma,dv))}

with を使用して最初の 24 の値を使用しt[1],t[2],...t[24]z=dv[1]次の 24 の値を使用したいなどz=dv[2]。. 本当にありがとうございました。dv[1],dv[2]...dv[365]t[1]t[2]

4

2 に答える 2

1

R はexpcossqrtおよびすべての算術演算子に対してベクトル化されるため、実際に行う必要があるのは、dv値に沿ってループすることだけです。

で関数を使用する例を次に示します。簡潔にするためsapplyに最初の 3 つの値のみを使用しています...t

dv <- 1:5
sapply( dv , function(i) stime( x = t[1:3] , y = 0.246*i , z = i ) )

     [,1]       [,2]          [,3]       [,4]          [,5]
[1,]  NaN -0.4054291 -6.621773e-16  0.1013573 -1.146727e-01
[2,]  NaN  0.4054291 -2.702861e-01 -0.1013573  7.689812e-16
[3,]  NaN -0.4054291  1.489523e-16 -0.2027146  1.146727e-01

したがって、z(現在のdv値である) の 1 つの値、 y0.246 * 現在の値である 1 つのdv値、および の 3 つの値がありtますx。出力は 3 つの値でt、シグマとdv値は毎回リサイクルおよび再利用されます。

最初の列のs は、この例ではとNaNの最初の値が 1 であるためです。tdv

cos(pi * (1 - 12)/(1 - 1))

これは次のように単純化されます。

cos(-Inf)
NaN

したがって、結果はNaNこの例にあるはずです (実際のデータには当てはまらないことを願っています)。

于 2013-08-09T21:19:40.733 に答える
1

多分:

hv <- stime( x =rep(dv, each= 24), y=rep(1:24, each=365), z=x)
于 2013-08-09T22:21:20.143 に答える