为了处理拖尾/领先的空间,我发现这个功能str_trim
。当应用于字符串矩阵时,它会返回一个向量。我很困惑。为什么矩阵的str_trim返回一个向量?
library(stringr)
str_trim(matrix(" strings ",3,3))
事实上,我通常使用gsub
,并且当施加到矩阵,GSUB返回一个矩阵,这是正常的。
为了处理拖尾/领先的空间,我发现这个功能str_trim
。当应用于字符串矩阵时,它会返回一个向量。我很困惑。为什么矩阵的str_trim返回一个向量?
library(stringr)
str_trim(matrix(" strings ",3,3))
事实上,我通常使用gsub
,并且当施加到矩阵,GSUB返回一个矩阵,这是正常的。
根据?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"
str_trim
简单地总是返回一个无量纲的载体。但是,您可以通过执行结构化分配来保留矩阵形状:
mat = matrix(" strings ",3,3)
mat[] = str_trim(mat)
哇,这很有趣!结构化分配。这是如何工作的?我注意到,如果我这样做:m [] = str_trim(mat),它不起作用。所以在一个结构化的赋值中,你必须有相同的变量名?在其他什么情况下它也可以工作? –
@KilianS不,相同的变量名是不必要的,替换数据只需要有相同的向量长度 - 在你的情况9中。例如,以下也可以工作:'mat [] = letters [1:9 ]'。如果'mat'和'm'具有相同数量的元素,则您尝试的代码也可以工作。 –