2017-08-07 125 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),如果读取的数据多于该数据,则立即重复。我认为最后的选择取决于你想如何刷新你的数据,但现在你有不同的解决方案可供选择。