从每行中的所有变量创建矩阵

时间:2018-01-12 12:47:28

标签: r dplyr tidyselect

我有一个存储一组矢量化矩阵的数据帧。也就是说,在每一行中,我都有NxM变量,这些变量对应于矩阵中的元素。

鉴于此数据框,我想将函数应用于存储在每一行中的矩阵,然后将结果存储在一个新变量中。

一种天真的方法是指定NxM变量的名称。例如,如果我想要应用的函数只是元素的总和(在实际情况下,它计算该矩阵的可能性):

library(dplyr)
cars %>% rowwise() %>% mutate(matrix=sum(matrix(c(speed,dist), nrow=1, ncol=2)))

但是由于我的矩阵的维度可能会从一个实验变为另一个实验,并且因为这个维度通常很大,以便枚举所有变量,所以我想要一个通用的解决方案。

我尝试

library(dplyr)
cars %>% rowwise() %>% mutate(matrix=sum(matrix(everything(), nrow=1, ncol=2)))

(在这个例子中,ncol和nrow应该适应当前的变量数量,但我可以手动完成。)

但这会引发错误:

  

mutate_impl(.data,dots)中的错误:评估错误:没有tidyselect   变量已注册。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用旧的apply功能:

library(dplyr)
cars %>% mutate(matrix = apply(., MARGIN = 1, function(x)
  sum(matrix(x, nrow = 1, ncol = 2))))

答案 1 :(得分:1)

purrrlyr - 包可能有用

get_matrix_sum <- function(x) {x %>% as.matrix() %>% sum()}
cars %>% purrrlyr::by_row(..f = get_matrix_sum, .collate = "rows", .to = "matrix")