#r #try-catch #lapply #na
#r #попробуйте-поймать #lapply #na
Вопрос:
Я создал довольно длинный скрипт для перебора списка файлов CSV и выполнения некоторых функций (например, функций lm ()) для каждого файла CSV, и впоследствии я хочу сохранить результаты в виде нового столбца в файле CSV в каждом раунде.
Проблема сейчас в том, что есть значения NA, и где бы они ни находились, файл CSV следует пропустить. Теперь я прочитал, что tryCatch
это можно использовать. И я много пытался заставить это работать, но я что-то упускаю. Я получаю эту ошибку: Error in tryCatch({ : object 'slope_CC' not found
Можете ли вы поместить несколько функций в одну функцию tryCatch? Я также смущен тем, как я вызываю все это, поскольку сначала код выполняется для одного файла CSV, а затем он должен выполняться для списка файлов CSV file_paths
. Но делается ли это функцией lapply в конце скрипта? slope_list <- lapply(file_paths, NDVI_CC)
Я пропустил то, что не нужно.
Это код:
setwd("E:/PYTHON_ST/breakCSV_PYTHON/AIM_2_regions/Test")
csv_path <- "E:\PYTHON_ST\breakCSV_PYTHON\AIM_2_regions\Test\selected0.csv"
NDVI_CC <- function(csv_path) {
df <- read.csv(csv_path, header = TRUE)
... (some data splitting and selecting)
#a) use tryCatch to continue when errors occur
slope_CC <- tryCatch({
#b) do mutlipe linear regression
model <- lm(NDVI ~ T Prec soilM, data = BeforeConf)
#c) use coefficients of MLR in new fomular to calc. new NDVI values
NDVI_AfterConf_Climate <- summary(model)$coefficients[1,1] ((summary(model)$coefficients[2,1])*AfterConf$T) ((summary(model)$coefficients[3,1])*AfterConf$Prec) ((summary(model)$coefficients[4,1])*AfterConf$soilM)
#d) create new table and put years and old and new NDVI values in it
Afterconf_update <- cbind(AfterConf$NDVI_Year, AfterConf$NDVI, NDVI_AfterConf_Climate)
#d) Calculate NDVi slopes for climate control
# x = years (after conf)
# y = NDVI_AfterConf_Climate
lm_func_CC <- lm(AfterConf$NDVI_Year ~ Afterconf_update[ ,3]) # select the 6th column -> NDVI_AfterConf_Climate should be added as a column in step before
# Get coefficient:
tmp_coef <- coef(lm_func_CC)
# Store coefficient:
slope_CC <- tmp_coef[2]
#e) Calculate NDVi slopes for normal NDVI
# x = years (after conf)
# y = NDVI_AfterConf
lm_func_old <- lm(AfterConf$NDVI_Year ~ Afterconf_update[ ,2]) # select the 6th column -> NDVI_AfterConf_Climate should be added as a column in step before
# Get coefficient:
tmp_coef <- coef(lm_func_old)
# Store coefficient:
slope_old <- tmp_coef[2]
},
error = function(e){
print(e)
return(NA)
},
warning = function(w){
print(w)
return(Warn)
},
return(slope_CC)
)
#return(data_frame(cbind(slope_CC)))
#return(data_frame(cbind(slope_old)))
}
Slopes_CC <- lapply(csv_path, NDVI_CC)
mypath <- "E:\PYTHON_ST\breakCSV_PYTHON\AIM_2_regions\Test"
file_paths <- list.files(pattern=".csv", path=mypath)
# LIST RETURN
slope_list <- lapply(file_paths, NDVI_CC)
Заранее благодарим вас за любую помощь или совет!
Комментарии:
1. есть ли какие-либо NAS во всем csv?
if (anyNA(df)) return(something)
2. Я знаю из предыдущей версии скрипта, где я использовал tryCatch для первой формулы, что есть значения NA. Но мне нужен скрипт, чтобы игнорировать эти