【发布时间】:2015-06-05 12:13:28
【问题描述】:
我有以下问题,我有一个数据框 (df):
df <- data.frame(inp = c("inp1", "inp2", "inp3"), A = c(1,2,3), B = c(1,2,3))
我需要从这个数据帧构造一个 inp*inp 方阵,它符合对角线和非对角线元素的某些公式。
对角元素计算为 M[i,i] = A[i,i]^2 + B[i,i] 非对角元素计算为 M[i,j] = A[i]* A[j] 其中 i,j 属于集合 (inp1, inp2, inp3)。
这就是我到目前为止所得到的——计算非对角线值的函数仍然让我无法理解。
matFun <- function(df){
x <- matrix(,
nrow = nrow(df),
ncol = nrow(df),
dimnames = list(df$inp, df$inp))
#funOffDiag <- ???
funDiag <- function(A,B){A^2 + B}
d <- apply(df[c("A","B")], 1, function(y) funDiag(y["A"],y["B"]))
diag(x) <- d
x
}
matFun(df)
我需要这个解决方案作为一个函数,因为我必须将它应用到一个较长的数据帧列表中。
【问题讨论】: