爲了處理拖尾/領先的空間,我發現這個功能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'具有相同數量的元素,則您嘗試的代碼也可以工作。 –