![](/img/trans.png)
[英]How can I parse out text from a string that uses pipes to separate elements of a vector in R?
[英]Parse vector elements as string in R
我知道這很簡單,但我找不到一個直截了當的解決方案。
如何告訴解釋器在不使用引號的情況下將矢量內容讀為字符串? 例:
vector<-c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH")
vector
[1] "AAA" "BBB" "CCC" "DDD" "EEE" "FFF" "GGG" "HHH"
如果我想用以下內容構建相同的對象,該怎么辦?
vector<-c(AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH)
Error: object 'AAA' not found
我們有一些像“to.character”之類的功能嗎? 這會對我有所幫助。 提前謝謝,抱歉天真的問題。
你不是想在這里強迫任何角色。 你試圖輸入一個字符串文字而不告訴R它是一個字符串文字。 您可以使用as.character()
將另一種向量強制轉換為字符向量,例如as.character(1:10)
,但是您無法做任何事情可以讓R將AAA
解釋為"AAA"
。 如果您告訴使用AAA
而不是"AAA"
,解釋器將始終查找名為AAA
的對象。
如果沒有引號, AAA
等將被解釋為名稱,並且將尋找具有此名稱的對象。 因此,您將需要非標准評估(使用參數“按原樣”,不進行評估 - substitute
返回未評估的表達式,並將deparse
轉換為字符串),類似於
c__ <- function(...) sapply(substitute(list(...)),deparse)[-1]
vec <-c__(AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH)
vec
# [1] "AAA" "BBB" "CCC" "DDD" "EEE" "FFF" "GGG" "HHH"
我不確定你是否可以這樣做,因為R將尋找無法找到的對象AAA。 但是為什么不在整個事物周圍加上引號然后用“,”分割矢量?
vector<-"AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH"
vec <- strsplit(vector, ",")[[1]]
str(vec)
chr [1:8] "AAA" " BBB" " CCC" " DDD" " EEE" " FFF" " GGG" " HHH"
當一個人學習R時,考慮向量和數據框架之間的關系是很重要的。 數據幀可以被認為是給定長度的相關向量的集合。 因此,使用Base R解決此問題的另一種方法是使用文件讀取函數之一(例如read.table()
)並從結果數據表中提取向量。
請注意,不是在一行上列出數據元素,而是必須在單獨的行中輸入它們。
aString <- "AAA
BBB
CCC
DDD
EEE
FFF
GGG
HHH"
# use text argument to read the aString object as if it is an external file
aVector <- read.table(text=aString,stringsAsFactors=FALSE)$V1
aVector
......和輸出:
> aVector
[1] "AAA" "BBB" "CCC" "DDD" "EEE" "FFF" "GGG" "HHH"
>
這種技術使人們能夠在行中輸入數據,並將其讀入數據幀。
# example with multiple vectors per row
aString ="
var1 var2
var1 var2
var1 var2"
read.table(text=aString,stringsAsFactors=FALSE)
......和輸出:
> read.table(text=aString,stringsAsFactors=FALSE)
V1 V2
1 var1 var2
2 var1 var2
3 var1 var2
>
如果您將對象作為長度為1的字符向量,即
x <- "AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH"
然后你可以使用scan
將其解析為一個字符向量。
myVec <- scan(textConnection(x), what="", sep=",")
由於scan
通常需要外部文件,因此您可以使用textConnection
構建可以即時工作的textConnection
。 連接的內部工作對我來說仍然有點模糊,但是在通過分塊處理大文件時它們非常有用。 有關連接的更多詳細信息,請參閱?textConnection
和?file
。
這將返回您想要的結果。
myVec
[1] "AAA" " BBB" " CCC" " DDD" " EEE" " FFF" " GGG" " HHH"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.