繁体   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