Я работаю над проектом, в котором я моделирую 8 социальных сетей в классе в течение 6 недель, то есть 30 итераций. Студенты будут номинировать друг друга на основе ряда факторов, и я планирую смоделировать ряд условий, в которых я уберу или добавлю некоторые из этих факторов в симуляцию. Другими словами, я буду повторять много кода, поэтому я предпочитаю использовать функции, а не копировать и вставлять их там, где это возможно.
Прямо сейчас я пытаюсь создать функцию, которая регулирует вероятность того, что один ученик выберет другого на основе схожести их эмоций. Когда я включаю его в набор вложенных циклов for, это работает просто отлично:
num_students <- 5
names_students <- letters[1:num_students]
student_emotion <- sample(round(runif(5, min = -5, max = 5), digits = 1))
student_emotion_df <- cbind.data.frame(names_students, student_emotion)
probs <- rep(1/num_students, 5)
row_prob <- vector(length = 5)
for(i in 1:num_students){
for(q in 1:num_students){
if(abs(student_emotion[i]-student_emotion[q]) >= 0 &
abs(student_emotion[i]-student_emotion[q]) <= .5){
row_prob[q] <- 1*probs[q]
} else if(abs(student_emotion[i]-student_emotion[q]) > .5 &
abs(student_emotion[i]-student_emotion[q]) <= 1) {
row_prob[q] <- .75 * probs[q]
}
else {
row_prob[q] <- .5 * probs[q]
}
}
}
Объект row_prob представляет собой вектор вероятностей того, что студент i в столбце выберет студента q в строках.
Я создал определяемую пользователем функцию на основе того же кода, и она работает:
emotion_difference_fun <- function(probs){
for(q in 1:num_students){
if(abs(student_emotion[i]-student_emotion[q]) >= 0 &
abs(student_emotion[i]-student_emotion[q]) <= .5){
row_prob[q] <- 1*probs[q]
} else if(abs(student_emotion[i]-student_emotion[q]) > .5 &
abs(student_emotion[i]-student_emotion[q]) <= 1) {
row_prob[q] <- .75 * probs[q]
}
else {
row_prob[q] <- .5 * probs[q]
}
}
return(row_prob)
}
emotion_difference_fun(probs)
Но когда я пытаюсь внедрить эту функцию в цикл for, перебирающий столбцы, row_prob возвращает пустой вектор:
for(i in 1:num_students){
emotion_difference_fun(probs)
}
Любые мысли о том, как я могу заставить это работать?
Спасибо за любую помощь, которую вы можете предложить.