2017-08-07 123 views
2

以下是我的示例數據幀mydf,我的數據幀的實際長度未知,因爲它將使用每行10 seconds的新行更新。我也創建了空數據幀da,db,dc,dd運行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檢索所述數據的邏輯和它在LALN推到基於的mydf$VinIF Vin == A的值,則相應的行數據的各數據幀應該被推送到數據幀da,類似地,IF VIN == B然後LA的數據& LNdb。驗證Vin中的值並將數據推送到相應數據幀的腳本應該每11 Seconds執行一次。

例如,如果該腳本在Time = Current_Second處執行,則該腳本應再次在Time = Current_Second + 11處運行。

+0

for循環與Sys.sleep ...例如 –

回答

-1

我認爲你可以使用proc.time命令設置的時間間隔,您可以定義要

2

也許更容易把DA,DB,DC和DD在列表的時間。沒有必要,但您的for-loop變得更清晰。

# 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. 
} 

輸出:

$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做這樣的:

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

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

或者,你應該避免做一個for -loop或repeat像上面,並執行你的程序每隔X秒從外部R.見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),如果讀取的數據多於該數據,則立即重複。我認爲最後的選擇取決於你想如何刷新你的數據,但現在你有不同的解決方案可供選擇。