2016-06-08 30 views
1

为了处理拖尾/领先的空间,我发现这个功能str_trim。当应用于字符串矩阵时,它会返回一个向量。我很困惑。为什么矩阵的str_trim返回一个向量?

library(stringr) 
str_trim(matrix(" strings  ",3,3)) 

事实上,我通常使用gsub,并且当施加到矩阵,GSUB返回一个矩阵,这是正常的。

回答

3

根据?stringr::str_trim()输出被预计是一个矢量:

值:

的字符向量。

一种可能性,以获得所期望的输出包括使用所述基础R函数trimws()

trimws(matrix(" strings  ",3,3)) 
#  [,1]  [,2]  [,3]  
#[1,] "strings" "strings" "strings" 
#[2,] "strings" "strings" "strings" 
#[3,] "strings" "strings" "strings" 
4

str_trim简单地总是返回一个无量纲的载体。但是,您可以通过执行结构化分配来保留矩阵形状:

mat = matrix(" strings  ",3,3) 
mat[] = str_trim(mat) 
+0

哇,这很有趣!结构化分配。这是如何工作的?我注意到,如果我这样做:m [] = str_trim(mat),它不起作用。所以在一个结构化的赋值中,你必须有相同的变量名?在其他什么情况下它也可以工作? –

+0

@KilianS不,相同的变量名是不必要的,替换数据只需要有相同的向量长度 - 在你的情况9中。例如,以下也可以工作:'mat [] = letters [1:9 ]'。如果'mat'和'm'具有相同数量的元素,则您尝试的代码也可以工作。 –

相关问题