Я пишу фрагмент кода R и застреваю.Как итеративно выполнить expand.grid в R
Справочная информация (что не является необходимым для решения проблемы): Я вычисляю совместную вероятность путем умножения независимых маргинальных распределений. Маргинальные векторы вероятности генерируются с помощью метода ProbGenerationProcess() итеративно. На каждой итерации он выведет вектор, например.
Iteration 1:
Color =
Blue Green
0.2 0.8
Iteration 2:
Material =
Cotton Silk
0.7 0.3
Iteration 3:
Country =
China USA
0.6 0.4
......
Желаемый результат: Я хочу в результате совместной вероятности быть продуктом каждого отдельного элемента в каждом маргинальной векторе. Формат должен выглядеть так.
Color Material Country Prob
Blue Cotton China 0.084 (= 0.2*0.7*0.6)
Blue Cotton USA 0.056 (= 0.2*0.7*0.4)
Blue Silk China 0.036 (= 0.2*0.3*0.6)
Blue Silk USA ..
Green Cotton China ..
Green Cotton USA ..
... ... ... ...
Моя реализация: Вот мой код:
joint.names = NULL # data.from store the marginal value names
joint.probs = NULL # store probabilities.
for (i in iterations) {
marginal = ProbGenerationProcess(VarUniqueToIteration) # output is numeric with names
if (is.null(joint.names)) {
# initialize the dataframes
joint.names = names(marginal)
joint.probs = marginal
} else {
# (my hope:) iteratively populate the joint.names and joint.probs
joint.names = expand.grid(joint.names, names(marginal))
expanded.prob = expand.grid(joint.probs, marginal)
joint.probs = expanded.prob$Var1 * expanded.prob$Var2 # Row-by-row multiplication.
}
}
Выход: Joint.probs явкой, чтобы быть всегда правильно, однако, joint.names не совсем работает так, как я разыскивается. После первых двух итераций все работает хорошо. Я получил:
joint.names =
Var1 Var2
1 Blue Cotton
2 Green Cotton
3 Blue Silk
4 Green Silk
... ...
Start от третьей итерации становится проблематичным:
joint.names =
Var1.Var1 Var1.Var2 Var1.Var1.1 Var1.Var2.1 Var2
1 Blue Cotton Blue Cotton China
2 Green Cotton Green Cotton China
3 Blue Silk Blue Silk USA
4 Green Silk Green Silk USA
Я думаю, мой первый вопрос: это самый эффективный способ, чтобы получить результат, что я хотел? Если это так, функция expand.grid() должна использоваться, и как ее инициализировать правильно?
Любая помощь приветствуется!
rownames (Probs) <- Probs $ Значение действительно умный! Решение слияния кажется более интуитивным, но спасибо за то, что он показал мне, как правильно использовать expand.grid. –