r语言 - 如何在使用调度程序调用函数时检查数据框架是否存在



我尝试每秒运行一个调用函数的调度器。在函数内部,调度器在第一次迭代中生成一个数据帧。在下一次迭代中,我想生成一个新的数据框,并将其与初始数据框一起bind_row。我没有成功,因为函数不识别内存中的数据帧。请参阅下面的示例代码,它没有对数据帧进行bind_row。

我也试图实现函数f1从:R:如何检查函数内部是否存在对象?

我想我必须检查内存中R从函数中保存对象的特定位置,尽管我没有成功。

你知道怎么解决这个问题吗?

谢谢!

library(tcltk2)
# alternative 1
run_once <- function() {
# Create a data frame
mydf1 <- data.frame (
Fruit = c("apple", "pear"),
Price = c(60, 45)
)

if (exists("mydf1_all", inherits = F) == TRUE){
mydf1_all <- bind_rows(mydf1_all, mydf1)
print("rows binded")
} else {
mydf1_all <- mydf1
print("rows not binded")
}
print(Sys.time())

# output run_once functie:
mydf1_all_output <<- mydf1_all
return(mydf1_all_output)
}
# start scheduler:
tclTaskSchedule(1000, run_once(), id = "run_once", redo = TRUE)
# stop scheduler:
tclTaskDelete("run_once")

# alternative 2
run_once2 <- function() {

# Create a data frame
mydf1 <- data.frame (
Fruit = c("apple", "pear"),
Price = c(60, 45)
)


if (exists("mydf1_all") && is.data.frame(get("mydf1_all")) == TRUE){
mydf1_all <- bind_rows(mydf1_all, mydf1)
print("rows binded")
} else {
mydf1_all <- mydf1
print("rows not binded")
}

print(Sys.time())

# output run_once functie:
mydf1_all_output <<- mydf1_all
return(mydf1_all_output)
}
# start scheduler:
tclTaskSchedule(1000, run_once2(), id = "run_once2", redo = TRUE)
# stop scheduler:
tclTaskDelete("run_once2")

感谢大家的提示和建议。我已经在下面的代码中实现了这些,现在运行良好。如果你对一个完全不同的逻辑有任何想法,我仍然会感兴趣!

library(tcltk2)
library(dplyr)
# alternative 1
run_once <- function() {
# Create a data frame
mydf1 <- data.frame (
Fruit = c("apple", "pear"),
Price = c(60, 45)
)

if (exists("mydf1_all")){
mydf1_all <<- bind_rows(mydf1_all, mydf1)
print("rows binded")
} else {
mydf1_all <<- mydf1
print("rows not binded")
}
print(Sys.time())

# output run_once function:
return(mydf1_all)
}
# start scheduler:
tclTaskSchedule(1000, run_once(), id = "run_once", redo = TRUE)
# stop scheduler:
tclTaskDelete("run_once")

# alternative 2
run_once2 <- function() {

# Create a data frame
mydf1 <- data.frame (
Fruit = c("apple", "pear"),
Price = c(60, 45)
)


if (exists("mydf1_all") && is.data.frame(get("mydf1_all"))){
mydf1_all <<- bind_rows(mydf1_all, mydf1)
print("rows binded")
} else {
mydf1_all <<- mydf1
print("rows not binded")
}

print(Sys.time())

# output run_once function:
return(mydf1_all)
}
# start scheduler:
tclTaskSchedule(1000, run_once2(), id = "run_once2", redo = TRUE)
# stop scheduler:
tclTaskDelete("run_once2")

相关内容

  • 没有找到相关文章

最新更新