我尝试每秒运行一个调度程序,它调用一个函数。在函数中,调度程序在第一次迭代中生成一个dataframe。在下一次迭代中,我想生成一个新的dataframe,并将其与初始dataframe绑定。我没有成功,因为函数无法识别内存中的dataframe。请参阅下面的示例代码,它不绑定dataframe。
我也试着从下面的代码中实现函数f1:R: How to check whether object exists inside function?虽然这给出了相同的问题。
我想我必须检查内存中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")
1条答案
按热度按时间qyyhg6bp1#
谢谢大家的提示和建议。我已经在下面的代码中实现了这些,现在运行良好。如果你有任何关于根本不同的逻辑的想法,我仍然会感兴趣!