我知道这很简单,但我找不到直接的解决方案。
如何告诉解释器在不使用引号的情况下将矢量内容读为字符串? 例如:
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”这样的功能吗?这会对我有所帮助。提前谢谢,抱歉天真的问题。
答案 0 :(得分:4)
你并没有试图在这里强迫任何角色。你试图输入一个字符串文字而不告诉R它是一个字符串文字。您可以使用as.character()
将另一种向量强制转换为字符向量,例如as.character(1:10)
,但您无法做任何事情,这样R就可以将AAA
解释为{{{ 1}}。如果您使用"AAA"
而不是AAA
,解释器将始终查找名为AAA
的对象。
答案 1 :(得分:4)
如果没有引号,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"
答案 2 :(得分:2)
我不确定你是否可以这样做,因为R将寻找无法找到的对象AAA。但是为什么不只是在整个事情上加上引号然后将矢量分成&#34;,&#34;?
gfx_vreg_corner: ldo@0185f000 {
compatible = "qcom,msm8953-gfx-ldo";
reg = <0x0185f000 0x30>, <0xa4000 0x1000>;
reg-names = "ldo_addr", "efuse_addr";
regulator-name = "msm_gfx_ldo";
regulator-min-microvolt = <1>;
regulator-max-microvolt = <7>;
qcom,ldo-voltage-ceiling = <620000 680000 750000>;
qcom,ldo-voltage-floor = <510000 510000 600000>;
qcom,num-corners = <7>;
qcom,num-ldo-corners = <3>;
qcom,ldo-enable-corner-map = <1 1 1 0 0 0 0>;
qcom,init-corner = <4>;
vdd-cx-supply = <&pm8953_s2_level>;
qcom,vdd-cx-corner-map = <RPM_SMD_REGULATOR_LEVEL_LOW_SVS>,
<RPM_SMD_REGULATOR_LEVEL_LOW_SVS>,
<RPM_SMD_REGULATOR_LEVEL_SVS>,
<RPM_SMD_REGULATOR_LEVEL_SVS_PLUS>,
<RPM_SMD_REGULATOR_LEVEL_NOM>,
<RPM_SMD_REGULATOR_LEVEL_NOM_PLUS>,
<RPM_SMD_REGULATOR_LEVEL_TURBO>;
mem-acc-supply = <&gfx_mem_acc>;
qcom,mem-acc-corner-map = <1 1 1 2 2 2 2>;
qcom,ldo-init-voltage-adjustment = <35000 25000 0>;
答案 3 :(得分:2)
当一个人学习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
>
答案 4 :(得分:1)
如果您将对象作为长度为1的字符向量,即
x <- "AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH"
然后您可以使用scan
将其解析为字符向量。
myVec <- scan(textConnection(x), what="", sep=",")
由于scan
通常需要外部文件,因此您可以使用textConnection
构建可以即时运行的内容。连接的内部工作对我来说仍然有点模糊,但是在通过分块处理大文件时它们非常有用。有关连接的详细信息,请参阅?textConnection
和?file
。
这会返回您想要的结果。
myVec
[1] "AAA" " BBB" " CCC" " DDD" " EEE" " FFF" " GGG" " HHH"