r语言 - apply() 函数分别按顺序应用于矩阵的列和数字向量的元素



我有一个函数f(list,t)其中第一个参数是list,第二个参数t是一个数字。 我想将 f 分别应用于矩阵 M 的列和向量 T 的元素。 因此,如果 M 列是 (M_1,M_2,...,M_k( 并且 T = (t_1,t_2,...,t_k(,我想得到以下内容:

f(M_1,t_1(, f(M_2,t_2(, ..., f(M_k,t_k(.

有没有一种有效的方法可以在不使用 for 循环的情况下做到这一点?

例如,如果

f <- function(list,x) {x %in% list}
M <- matrix(1:12,4,3)
T <- c(1,2,10)

我希望得到

TRUE FALSE TRUE

以下行将 f 应用于 M 的每一列和 T 的每个元素

apply(M,2,f,T)

但我需要的只是这个输出的对角线,所以我想要一种方法来避免额外的计算。

您还可以使用矩阵中的列数来使用sapply。稍后,我们使用any从每列返回 True(如果有(值

Tr <- c(1,2,10)
sapply(seq(ncol(M)), function(x) any(f(M[,x], Tr)))
[1]  TRUE FALSE  TRUE

将矩阵转换为数据框,然后使用purrr包中的map2函数:

library(tidyr)
df <- as.data.frame(M)
unlist(map2(df, t, f))

同样,将变量命名为T(或F(也是一个糟糕的主意,因为这可能会导致逻辑术语出现大量问题。

mapply(f,as.data.frame(M),T)

需要as.data.frame才能将M转换为矩阵列的列表,并且mapply以成对方式将f应用于生成的列表和向量T

最新更新