在所有行上应用Function以在R中获得矩阵输出

时间:2016-09-28 13:28:25

标签: r loops matrix dataframe apply

我需要在数据帧的所有行上应用函数。这些函数的参数将是两个向量,

例如,

f <- function(vec1,vec2)
     { return(sum(vec1) - sum(vec2))
     }

现在我需要在我的数据帧的所有行上应用它,这样我就可以填充矩阵中的所有值并使用该矩阵进行分析。

df <- data.frame(A=c(1,2,3,4),B=c(3,4,3,4),C=c(5,6,4,5))

应用此功能应该提供以下矩阵

enter image description here

1 个答案:

答案 0 :(得分:1)

试试这个:

m <- diag(nrow(df))
s <- rowSums(df)
r <- combn(nrow(df), 2, function(x) c(s[x[1]]-s[x[2]],s[x[2]]-s[x[1]]))
m[lower.tri(m, diag = F)] <- r[1,]
m <- t(m)
m[lower.tri(m, diag = F)] <- r[2,]
diag(m) <- 0

     # [,1] [,2] [,3] [,4]
# [1,]    0   -3   -1   -4
# [2,]    3    0    2   -1
# [3,]    1   -2    0   -3
# [4,]    4    1    3    0

如果您坚持使用自己定义的函数f,请执行以下操作:

m <- diag(nrow(df))
r <- combn(nrow(df), 2, function(x) c(f(df[x[1],],df[x[2],]), f(df[x[2],],df[x[1],])))
m[lower.tri(m, diag = F)] <- r[1,]
m <- t(m)
m[lower.tri(m, diag = F)] <- r[2,]
diag(m) <- 0