2016-06-08 102 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'具有相同數量的元素,則您嘗試的代碼也可以工作。 –

相關問題