#r #loops #for-loop
#r #циклы #для цикла
Вопрос:
Я пытаюсь перебрать список символов:
covariate_names <- c("Age_50.", "Age_30.49", "Age_18.29", "Income_High", "Income_Medium", "Income_Low",
"DemographicSegment_Value.Seeker", "DemographicSegment_Established", "DemographicSegment_Planner", "DemographicSegment_Affluent",
"DemographicSegment_Digital.Native","Gender_F..", "Gender_M..", "TransactionAmount",
"TechTxns", "FashionTxns", "TravelTxns", "GamerTxns",
"Recency", "Frequency", "Monetary", "Breadth", "Consistency", "is_donor", "donation_amt")
pairs <- function(df, covariate, group){
pwc <- pairwise_t_test(data = df,
formula = as.formula(paste0(covariate,"~",group)),
paired = FALSE )
pwc <- as.data.frame(pwc)
pwc <- pwc %>% rename(GroupA = group1,
GroupB = group2,
N_grpA = n1, N_grpB = n2)
pwc <- pwc[,1:7]
pwc <- pwc %>%
mutate_if(is.numeric, round, digits = 6)
#print(pwc)
}
for (i in covariate_names){
pwc_i <- pairs(df = df_test_TS, covariate = i, group = "w.contextual")
}
Но pairs
функция возвращает df, поэтому я не знаю, можно ли для этого использовать цикл. Я просто хочу запустить функцию pairs для всех моих ковариаций в списке и иметь возможность вызывать выходные данные из каждой отдельной итерации pairs
функции.
Ответ №1:
Вы можете использовать функцию :
library(dplyr)
library(purrr)
pairs <- function(df, covariate, group){
pwc <- pairwise_t_test(data = df,
formula = reformulate(group, covariate),
paired = FALSE )
pwc <- as.data.frame(pwc)
pwc %>%
rename(GroupA = group1,
GroupB = group2,
N_grpA = n1, N_grpB = n2) %>%
select(1:7) %>%
mutate(across(where(is.numeric), round, digits = 6))
#For older dplyr
#mutate_if(is.numeric, round, digits = 6)
}
а затем используйте map
/ lapply
для получения списка в качестве вывода :
result <- map(covariate_names, ~pairs(df_test_TS, .x, "w.contextual"))
Если вы хотите объединить результаты в один фрейм данных, используйте map_df
:
result <- map_df(covariate_names, ~pairs(df_test_TS, .x, "w.contextual"))
Ответ №2:
Вам нужно будет сохранить ваши результаты в списке, используя цикл. Вы можете попробовать следующий код:
#Data
covariate_names <- c("Age_50.", "Age_30.49", "Age_18.29", "Income_High", "Income_Medium", "Income_Low",
"DemographicSegment_Value.Seeker", "DemographicSegment_Established", "DemographicSegment_Planner", "DemographicSegment_Affluent",
"DemographicSegment_Digital.Native","Gender_F..", "Gender_M..", "TransactionAmount",
"TechTxns", "FashionTxns", "TravelTxns", "GamerTxns",
"Recency", "Frequency", "Monetary", "Breadth", "Consistency", "is_donor", "donation_amt")
#Function
pairs <- function(df, covariate, group){
pwc <- pairwise_t_test(data = df,
formula = as.formula(paste0(covariate,"~",group)),
paired = FALSE )
pwc <- as.data.frame(pwc)
pwc <- pwc %>% rename(GroupA = group1,
GroupB = group2,
N_grpA = n1, N_grpB = n2)
pwc <- pwc[,1:7]
pwc <- pwc %>%
mutate_if(is.numeric, round, digits = 6)
#print(pwc)
}
Здесь изменения:
#List to store results
List <- list()
#Loop
for (i in 1:length(covariate_names)){
List[[i]] <- pairs(df = df_test_TS, covariate = covariate_names[i], group = "w.contextual")
}