以指定的时间间隔运行R脚本

时间:2017-08-07 09:24:22

标签: r dataframe

以下是我的示例数据框mydf,我的数据框的实际长度未知,因为它将针对每个10 seconds使用新行进行更新。我还创建了空数据框dadbdcdd

    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检索数据,并根据mydf$VinIF Vin == A的值将其推送到相应的数据框,那么LALN的各个行数据应该被推送到数据帧da,类似地,IF VIN == B然后是LA&的数据。 LN - > db。验证Vin中的值并将数据推送到相应数据帧的脚本应该针对每个11 Seconds执行。

对于前。如果脚本在Time = Current_Second执行,则脚本应再次在Time = Current_Second + 11处重新运行。

4 个答案:

答案 0 :(得分:2)

将da,db,dc和dd放在列表中可能更容易。没有必要,但你的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.
}

输出:

$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

答案 1 :(得分:2)

您可以使用useProgram执行以下操作:

Sys.sleep

或者,您可能应该避免执行repeat { # Your code goes here cat("Hello, again!\n") Sys.sleep(11) # Wait 11 seconds } # Hello, again! # Hello, again! # ... - 循环或for,如上所述,并且每隔X秒从外部R执行您的程序。请参阅e.g. this.

答案 2 :(得分: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分钟,您可能愿意执行下一次刷新,上一次刷新后立即执行,因此对系统时间进行计算可能比使用&#更安全39; Sys.sleep实际上为您提供:operations time + Sys.sleep(11) = your actual interval。建议的方法反映逻辑:等待至少 11秒(interval),如果读取的数据超过该值,则立即重复。我认为最终的选择取决于您想要刷新数据的方式,但现在您有不同的解决方案可供选择。

答案 3 :(得分:-1)

我认为您可以使用proc.time命令来设置间隔,您可以定义您想要的时间