#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)