簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM