你舉的例子是不可複製的,所以我試圖讓它如此:
list.prob <-
list(structure(c(0.07692308, 0.38461538, 0.53846154, 0.42857143,
0.33333333, 0.23809524), .Dim = c(3L, 2L), .Dimnames = structure(list(
x = c("overcast", "rainy", "sunny"), y = c("no", "yes")), .Names = c("x",
"y"))), structure(c(0.2307692, 0.3846154, 0.3846154, 0.3333333,
0.2380952, 0.4285714), .Dim = c(3L, 2L), .Dimnames = structure(list(
x = c("cool", "hot", "mild"), y = c("no", "yes")), .Names = c("x",
"y"))))
mat <-
structure(c("sunny", "sunny", "overcast", "rainy", "hot", "hot",
"hot", "mild"), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("outlook",
"temperature")))
這給東西很像你開始什麼用(除了有限的mat
,只有那些似乎對應列以條目list.prob
:
> list.prob
[[1]]
y
x no yes
overcast 0.07692308 0.4285714
rainy 0.38461538 0.3333333
sunny 0.53846154 0.2380952
[[2]]
y
x no yes
cool 0.2307692 0.3333333
hot 0.3846154 0.2380952
mild 0.3846154 0.4285714
> mat
outlook temperature
[1,] "sunny" "hot"
[2,] "sunny" "hot"
[3,] "overcast" "hot"
[4,] "rainy" "mild"
您的問題,然後根據在的表mat
每列翻譯,但是使用哪一列取決於另一個變量的值(我將稱之爲yesorno
)。
# setup
res <- matrix(0,nrow=nrow(mat),ncol=ncol(mat))
yesorno <- "yes"
# actual computation
for (col in seq_len(ncol(mat))) {
res[,col] <- list.prob[[col]][,yesorno][mat[,col]]
}
給予
> res
[,1] [,2]
[1,] 0.2380952 0.2380952
[2,] 0.2380952 0.2380952
[3,] 0.4285714 0.2380952
[4,] 0.3333333 0.4285714
這假定的mat
第一列對應於list.prob
第一元件等;如果映射不是那麼簡單,那麼您需要一些相關方法(可能根據mat
的列名稱命名list.prob
的元素,並循環遍歷列名以在list.prob
中執行查找)。