使用R求和矩阵的1:n个元素,而不使用for循环

  • 本文关键字:元素 循环 for 求和 使用 r
  • 更新时间 :
  • 英文 :


我正在尝试用R编写一些代码,以从中获得:

begin{align*}
begin{pmatrix}
a1 & b1 & c1 & d1 & e1 & f1 & g1 & h1 & i1 & hdots \ 
a2 & b2 & c2 & d2 & e2 & f2 & g2 & h2 & i2 & hdots \ 
vdots & vdots & vdots & vdots & vdots & vdots & vdots & vdots & vdots 
end{pmatrix}
end{align*}

到此:

begin{align*}
begin{pmatrix}
a1 + b1 + c1 & d1 + e1 + f1 & g1 + h1 + i1 & hdots \ 
a2 + b2 + c2 & d2 + e2 + f2 & g2 + h2 + i2 & hdots \ 
vdots & vdots & vdots 
end{pmatrix}
end{align*}

但是,如果不使用for循环,则不确定这是否可行。

我认为这最终会让它变对:


## given x
library(magrittr)
smaller.matrix <- matrix( t(x), nrow=3 ) %>%
colSums %>%
matrix( byrow=TRUE, nrow=nrow(x) )

magrittr库仅用于添加可读性的%>%运算符。如果你愿意的话,你可以使用所有的lisp并将语句封装到多层(...)

此外,上面的解决方案排序要求你的列数可以整除我的3,但这似乎是基于你的问题的描述

假设Note最后的输入将其读取到单独的行中(如果您已经有了,则省略此项(,并使用grep查找要修改的行,并使用gsub执行修改。

L <- readLines(textConnection(Lines))
hdots <- grep("hdots", L)   
L[hdots] <- gsub("&([^&]*)&([^&]*)&", "+\1+\2&", L[hdots])
vdots <- grep("vdots", L)    
L[vdots] <- gsub("(.vdots) & .vdots & .vdots", "\1", L[vdots])
L <- paste(L, collapse = "n")
cat(L, "n")

给予:

begin{align*}
begin{pmatrix}
a1 + b1 + c1 & d1 + e1 + f1 & g1 + h1 + i1 & hdots \ 
a2 + b2 + c2 & d2 + e2 + f2 & g2 + h2 + i2 & hdots \ 
vdots & vdots & vdots 
end{pmatrix}
end{align*} 

备注

可复制形式的输入:

Lines <- r"[
begin{align*}
begin{pmatrix}
a1 & b1 & c1 & d1 & e1 & f1 & g1 & h1 & i1 & hdots \ 
a2 & b2 & c2 & d2 & e2 & f2 & g2 & h2 & i2 & hdots \ 
vdots & vdots & vdots & vdots & vdots & vdots & vdots & vdots & vdots 
end{pmatrix}
end{align*}]"

最新更新