1

ベクトル(毎日の時間ステップで約 3 か月を表す) を取得しました。test <- c(1:90)の 10 日から 20 日の間にある場合にのみ、モデルの実行中に変数に値を与えたいと考えています。

//model code

if(month-day>10 && month-day<20)
{
    parameter <- 10
} else {
    parameter <- 5
}

モジュラス ( test%%30) を見つけることで、各月の日を含むベクトルを取得できますが、この後続のベクトルから各月の 10 ~ 20 日の位置を取得する必要があります。

> test%%30
[1] 1 2 3 4 [...] 27 28 29 0 1 2 3 ...

必要な値を取得する方法でブリックウォールにぶつかりました (つまり、この単純な例ではtest[11:19]、 、test[41:49]andtest[71:79]が必要です。一瞬...

4

3 に答える 3

1

1:30 のブロックに変換するには、次を使用します。

(test-1)%%30+1

10:19 の数字 (10 から始まる 10 のブロック) を取得したい場合は、次のように使用できます。

test[(((test-1)%%30+1)%/%10)==1]

しかし、11 から始まる 9 のブロックが必要なので、モジュラスの後のシフトについてもう少し考える必要があります。

test[(((test-1)%%30-1)%/%9)==1]
 [1] 11 12 13 14 15 16 17 18 19 41 42 43 44 45 46 47 48 49 71 72 73 74 75 76 77
[26] 78 79
于 2012-04-17T15:05:07.167 に答える
0
x <- 1:90
param <- rep(5, length(x))
param[x%%30 > 10 & x%%30 < 20] <- 10
#Double check output 
cbind(x, param)
于 2012-04-17T14:42:37.130 に答える
0

ジョランの答えを少し拡張するには、次のようにします。

test <- c(1:90)
days <- test%%30
positions <- test[days %in% 10:20]

testこれは、各日の位置が 10 から 20 の間のベクトルを返します。

ただし、なぜそのポジションが必要なのか完全にはわかりません。あなたのコードは次のものを使用できませんでした:

for(x in 1:90) {
    if(days[x]>=10 && days[x]<=20) {
        parameter <-  10
    } else {
        parameter <- 5
    }
}

それとも、ここで何か不足していますか?

追加するために編集:おっと、そのような場合、パラメーターをベクトルとして使用する方が適切である可能性があることに注意する必要がありました-私はそのようにコードを作成しませんでした。

于 2012-04-17T14:50:28.873 に答える