![](/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.