Повторите анализ для нескольких наборов данных в R

#r #function

Вопрос:

Как я могу повторить этот код для каждого субъекта (xxx), чтобы результаты были добавлены в data.frame (центральные области)?

 fullDataDetrend_xxx <- subset(fullDataDetrend, subjno == xxx, select=c(subjno,depressed,sad,tired,interest,happy,neg_thoughts,concentration_probl,ruminating,activity,datevar,timestamp,dayno,beepno))

  model_xxx <- var1( 
    fullDataDetrend_xxx)

model_xxx_omega <- getmatrix(model_xxx, "omega_zeta")
centrality_model_xxx_omega <- centrality(model_xxx_omega )

centralities[nrow(centralities)   1,] <- c("xxx",centrality_model_xxx_omega$InExpectedInfluence)
 

Комментарии:

1. sp <- split(fullDataDetrend, fullDataDetrend$subjno) Затем вы можете lapply использовать функцию с вашим кодом для каждого члена разделенного списка. Можете ли вы опубликовать примеры данных? Пожалуйста, отредактируйте вопрос с выводом dput(fullDataDetrend) . Или, если он слишком велик с выходом dput(head(fullDataDetrend, 20)) .

2. Кроме того, пожалуйста, явно загрузите используемые вами библиотеки. var1 , centrality и getmatrix не являются базовыми функциями R, в каких пакетах их можно найти? Начните пример кода с library() инструкций.

Ответ №1:

Сделал, как было предложено:

 fullDataDetrend_split <- split(fulldataDetrend, fulldataDetrend$subjno)
 

затем, чтобы оценить сеть, извлеките оценки централизации и напишите в центры в глобальной среде:

 analyze_one <- function(dataframe){
  network_model <- var1( 
    dataframe,
    vars = useVars,
    contemporaneous = "ggm",
    dayvar = "dayno",
    beepvar = "beepno",
    estimator = "FIML",
    verbose = TRUE,
    omega_zeta = "full")
    model_omega <- getmatrix(network_model, "omega_zeta")
    centrality_omega<- centrality(model_omega)
    model_beta <- getmatrix(network_model, "beta")
    centrality_beta<- centrality(model_beta)
    subjno <- as.list(dataframe[1,2])
    centralities[nrow(centralities)   1,] <- c(subjno,centrality_omega$InExpectedInfluence,centrality_beta$InExpectedInfluence,centrality_beta$OutExpectedInfluence)
    assign('centralities',centralities, envir=.GlobalEnv)
    }
 

затем повторите код с помощью lapply для всех кадров данных (с игнорированием ошибок):

 lapply_with_error <- function(X,FUN,...){    
  lapply(X, function(x, ...) tryCatch(FUN(x, ...),
                                      error=function(e) NULL))
}
lapply_with_error(fullDataDetrend_split, FUN = analyze_one)