R映射到多重矩阵

R映射到多重矩阵,r,matrix,R,Matrix,假设我有三个矩阵 col1 <- matrix(rep(c(1,2),each=5),5,ncol=2) col2 <- matrix(rep(c(3,4),each=5),5,ncol=2) col3 <- matrix(rep(c(5,6),each=5),5,ncol=2) 我曾考虑使用mapply,但mapply返回单个值 mapply(function(a,b,c) {print(paste(a,b,c))},col1,col2,col3) [1] "1 3 5"

假设我有三个矩阵

col1 <- matrix(rep(c(1,2),each=5),5,ncol=2)
col2 <- matrix(rep(c(3,4),each=5),5,ncol=2)
col3 <- matrix(rep(c(5,6),each=5),5,ncol=2)
我曾考虑使用mapply,但mapply返回单个值

mapply(function(a,b,c) {print(paste(a,b,c))},col1,col2,col3)
[1] "1 3 5" "1 3 5" "1 3 5" "1 3 5" "1 3 5" "2 4 6" "2 4 6" "2 4 6" "2 4 6" "2 4 6"
基本上,我希望将矩阵的每一行作为一个组来处理,但我不太清楚如何处理

我知道我可以用for循环来实现这一点,但我正试图避免这种情况

蒂亚


编辑-它不是关于打印格式,而是关于使用每个矩阵的每一行作为向量输入集

e、 g


如果这真的是关于打印格式的,那么这里有一个应该可以工作的函数。我们使用“粘贴”将元素组合成字符串,并使用“应用”将函数应用到Matice的行中

foo <- function(..., .dots=list()) {
    dots<-c(list(...), .dots)
    x <- apply(sapply(dots, function(x) 
         paste0("(", apply(x,1,paste,collapse=","), ")")),
         1, paste, collapse=",")
    paste0(1:length(x), ". ", x, collapse="\n")
}

cat(foo(col1,col2,col3))
# 1. (1,2),(3,4),(5,6)
# 2. (1,2),(3,4),(5,6)
# 3. (1,2),(3,4),(5,6)
# 4. (1,2),(3,4),(5,6)
# 5. (1,2),(3,4),(5,6)

您可以使用Map函数

请尝试以下操作:

f1 <- function(x) paste("(", paste(as.character(x), collapse = ","), ")", sep="")
f2 = unlist(Map(function(x) paste(x, ". ", paste(f1(col1[x,]), f1(col2[x,]), f1(col3[x,]), sep = ","), sep = ""), 1:nrow(col1)))
cat(f2, sep="\n")

为什么要这样做?我有多个大小相同的矩阵要传递给一个函数。每个矩阵中的每一行代表一个输入。不清楚您试图实现什么。只需比较一下1、2、3就可以产生所需的输出,因为矢量化。另一种方法是转置矩阵并将其转换为data.frames。mapply应该可以工作。它不是关于打印格式,而是关于使用每个矩阵的每一行作为向量输入集。请看我的编辑。我基本上想对矩阵逐行使用mapply。
foo <- function(..., .dots=list()) {
    dots<-c(list(...), .dots)
    x <- apply(sapply(dots, function(x) 
         paste0("(", apply(x,1,paste,collapse=","), ")")),
         1, paste, collapse=",")
    paste0(1:length(x), ". ", x, collapse="\n")
}

cat(foo(col1,col2,col3))
# 1. (1,2),(3,4),(5,6)
# 2. (1,2),(3,4),(5,6)
# 3. (1,2),(3,4),(5,6)
# 4. (1,2),(3,4),(5,6)
# 5. (1,2),(3,4),(5,6)
cat(foo(.dots=list(col1,col2,col3)))
f1 <- function(x) paste("(", paste(as.character(x), collapse = ","), ")", sep="")
f2 = unlist(Map(function(x) paste(x, ". ", paste(f1(col1[x,]), f1(col2[x,]), f1(col3[x,]), sep = ","), sep = ""), 1:nrow(col1)))
cat(f2, sep="\n")
1. (1,2),(3,4),(5,6)
2. (1,2),(3,4),(5,6)
3. (1,2),(3,4),(5,6)
4. (1,2),(3,4),(5,6)
5. (1,2),(3,4),(5,6)