2017-08-07 27 views
2

以下は私のサンプルデータフレームmydfです。私のデータフレームの実際の長さは、10 secondsごとに新しい行で更新されるため、不明です。また空のデータフレームを作成しましたdadbdcdd指定された時間間隔でRスクリプトを実行

Vin LA LN 
     A 98 89 
     B 7 98 
     C 5 89 
     D 23 74 
     A 81 23 
     A 28 37 
     B 34 48 

今私は、データフレームmydfからデータを取得しなければならないロジックを実装し、LALNmydf$VinすなわちIF Vin == Aの値は、それぞれの行データに基づいて各データフレームにプッシュする必要がありますデータフレームdaにプッシュし、同様にIF VIN == Bのデータ、次にLA & LN - >dbのデータをプッシュする必要があります。 Vinの値を検証し、それぞれのデータフレームにデータをプッシュするこのスクリプトは、11 Secondsごとに実行する必要があります。

例:スクリプトがTime = Current_Secondで実行された場合、スクリプトは再びTime = Current_Second + 11に再実行されます。

+0

forループwith Sys.sleep ... –

答えて

-1

私はあなたが多分それは、リスト内のDA、DB、DC及びDDを置くために簡単です

2

にしたい時間を定義することができ、間隔を設定するproc.timeコマンドを使用することができると思います。必須ではありませんが、forループは読みやすくなります。

# sample data 
df = read.table(text="Vin LA LN 
A 98 89 
B 7 98 
C 5 89 
D 23 74 
A 81 23 
A 28 37 
B 34 48",header=T) 

# a list of your dataframes. 
your_df = list(A= data.frame(LA= numeric(0), LN= numeric(0)), 
       B= data.frame(LA= numeric(0), LN= numeric(0)), 
       C= data.frame(LA= numeric(0), LN= numeric(0)), 
       D= data.frame(LA= numeric(0), LN= numeric(0)) 
) 

for(i in 1:nrow(df)) 
{ 
    your_df[[df$Vin[i]]] = rbind(your_df[[df$Vin[i]]], df[i,c("LA","LN")]) 
    Sys.sleep(11) # set this to the desired amount of time between iterations. 
    print(your_df) # optional to show progress. 
} 

出力:あなたはおそらく上記のようなfor -loopまたはrepeatを行うことを避ける必要があり、

repeat { 
    # Your code goes here 
    cat("Hello, again!\n") 

    Sys.sleep(11) # Wait 11 seconds 
} 
# Hello, again! 
# Hello, again! 
# ... 

を代わりにし、実行します。

$A 
    LA LN 
1 98 89 
5 81 23 
6 28 37 

$B 
    LA LN 
2 7 98 
7 34 48 

$C 
    LA LN 
3 5 89 

$D 
    LA LN 
4 23 74 
2

あなたはこのような何かをSys.sleepを使用することができますあなたのプログラムは、外部からR秒ごとにX秒ごとに表示されます。e.g. this.

1

は、私は次のようなアプローチを示唆している:時間間隔は秒の所望の数よりも大きい場合、それはあらゆる機会に目的のコマンドを実行します

# Define interval in seconds 

interval <- 11 
strt_tme <- Sys.time() 


repeat { 
    if (Sys.time() - strt_tme > interval) { 
     strt_tme <- Sys.time() 
     print(paste("Start time:", strt_tme, 
        "Current time:", Sys.time())) 
    } 
} 

ノート

反しSys.sleepに。あなたのデータが11秒ごとに更新されますが、読み込みテーブルが1分かかる場合、の直後にの直後にリフレッシュを実行しても構わない場合がありますので、実際には 'Sys.sleepを使用するよりもシステム時間あなたに与えます:operations time + Sys.sleep(11) = your actual interval。提案されたアプローチは、ロジックを反映します。少なくとも 11秒(interval)の場合、データの読み取りにそれ以上の時間がかかる場合は、すぐにを繰り返します。私は最終的な選択はあなたのデータを更新する方法に依存していると推測しますが、今から選択するソリューションが異なります。

関連する問題