我遇到过类似的问题,比如效率低下而不是失败,它使用lapply解决here。lapply在使用自定义函数时返回NULL
(编辑) 这次我将包含垃圾数据的工作代码,在运行时会抛出错误。下面的代码按原样运行,但是我想用最后的#'d lapply函数替换if(numruns == ...)语句。 使用func_ign_time的lapply分配NULL值。 我也遇到了func_drop_time的一些错误,但它们可能是相关的。
numruns = 3
pyro_1 <- as.numeric(c(100,70,50,2,3,4,60,160,260,360,503))
pyro_2 <- as.numeric(c(100,100,100,70,50,2,3,4,60,160,260,360,503))
pyro_3 <- as.numeric(c(100,100,70,50,2,3,4,60,160,260,360,503))
time_diff <- seq(1,100,1)
func_ign_time <- function(data, delay = 5, threshold = 5, time="time_diff"){
diff_data <- diff(data[1:length(data)])
flag <- 0
for (i in 1:length(diff_data)){
if (diff_data[i] > threshold && diff_data[i+1] > threshold && i > delay){
flag <- 1
time <- as.numeric(time_diff[i])
#print(paste0("Plug ignition time: ", time, " seconds"))
return (time)
}
}
}
func_drop_time <- function(data, threshold = -5, time="time_diff"){
diff_data <- diff(data[1:length(data)])
flag <- 0
for (i in 1:length(diff_data)){
if (diff_data[i] < threshold && flag == 0){
flag <- 1
time <- as.numeric(time_diff[i])
#print(paste0("Plug drop time: ", time, " seconds"))
return(time)
}
}
}
if (numruns == 3){
time_ign_3 <- as.numeric(func_ign_time(pyro_3)-func_drop_time(pyro_3))
time_ign_2 <- as.numeric(func_ign_time(pyro_2)-func_drop_time(pyro_2))
time_ign_1 <- as.numeric(func_ign_time(pyro_1)-func_drop_time(pyro_1))
print(paste(time_ign_1,time_ign_2,time_ign_3))
}
if (numruns == 2){
time_ign_2 <- as.numeric(func_ign_time(pyro_2)-func_drop_time(pyro_2))
time_ign_1 <- as.numeric(func_ign_time(pyro_1)-func_drop_time(pyro_1))
print(paste(time_ign_1,time_ign_2))
}
if (numruns == 1){
time_ign_1 <- as.numeric(func_ign_time(pyro_1)-func_drop_time(pyro_1))
print(paste(time_ign_1))
}
#ign_names <- paste0("pyro_", seq_len(numruns))
#xx <- lapply(ign_names, function(x) (func_ign_time(x)))
#yy <- lapply(ign_names, function(x) (func_drop_time(x)))
#zz <- xx-yy
这里的背景有点不清楚;如果您可以编辑您的问题以便代码可以自行运行,这将有所帮助。最初,我发现你使用'lapply'来调用'func_ing_time',但'func_ing_time'的'return'值嵌套在一个循环中。你只能从一个函数返回一个值;你期待'func_ing_time'函数返回多个值吗?如果是这样,那么你应该通过调用'lapply'或'sapply'来替换func_ing_time中的'for'循环。同样,如果您发布了运行的代码,则帮助您会更容易。 – FascinatingFingers
除了上面的注释,请指定输入:什么是'pyro_x',一个向量或一个数据框?查看[本指南](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)了解如何提出一个很好的问题。 – tonytonov
谢谢,我已经更新了这个问题,希望它更容易理解。 Pyro_x是一个向量。 – user3564760