在R中从字符向量中删除引号

67

假设您有一个字符向量:

char <- c("one", "two", "three")

当引用索引值时,您会得到以下结果:

> char[1]
[1] "one"

如何去除返回值中的引号以得到以下结果?

[1] one

那么你只想在将其打印到标准输出(或文件)时删除引号吗? - Prasad Chalasani
2
我正在尝试通过一个函数循环遍历字符向量的元素,但我需要去掉引号。 - Milktrader
1
我想我仍然不理解确切的目的——也许发布使用示例会有所帮助。 - Prasad Chalasani
2
开个玩笑...我不太明白你在干什么...cat("[1]", char[1], "\n") - aL3xa
1
我不确定我是否理解您的用例,但我认为您可能想要使用as.symbol()或as.name()。如果这是来自一个包,您的函数可能需要一个符号,而不是noquote,尽管很难说什么会起作用。 - Noah
显示剩余2条评论
11个回答

130

只需尝试 noquote(a)

noquote("a")

[1] a


太棒了!我已经使用R语言9年了,但我仍然时常学习到新的酷炫函数。 - Andrew Brēza
嗨@AlexArgus,有没有办法在将文件保存出R后继续进行?一旦我尝试在R /命令行之外打开它,引号就会出现?谢谢! - ayeepi

34

返回值中没有引号,只有在使用print()输出时才会出现。尝试:

> print(char[1], quote=FALSE)
[1] one
或者
> cat(char[1], "\n")
one

查看没有引号的值。


31

as.name(char[1])可以工作,尽管我不确定为什么你真的想这样做 - 例如在paste中引号将不会被传递:

as.name(char[1])可以使用,但我不确定为什么你会想要这样做 - 例如,在paste中引号不会被带入:

> paste("I am counting to", char[1], char[2], char[3])
[1] "I am counting to one two three"

8
as.name()和as.symbol()都将char[1]元素转换为"name"类。noquote()将char[1]元素转换为"noquote"类。哦,我不知道R有这么多类。谢谢。 - Milktrader
@AlexArgus提供了一个更简单的解决方案,即noquote("a")。 - Rotail
as.nameas.symbolget只允许少于10000字节的名称。noquote没有这个限制。 - Chintan Pathak
嗯,有人知道如何在noquote之后获取一个字符类,但是不带引号吗? - abc
如何使用值向量获得与as.name()相同的结果? - merry123

21
你将quantmod的“symbol”(与某些金融工具代码相关的术语)与R中的“symbol”混淆了,后者是R中的一种“类型”。你曾说过:
我有一个股票符号的字符向量,我将其传递给quantmod::getSymbols()函数,并且该函数将不带引号的符号返回环境。
几乎正确,它所做的是在指定的环境中创建这些名称的对象。我认为您想要做的是按名称从环境中获取内容。为此,您需要使用“get”。以下是示例代码,在默认环境中有效的方法:
getSymbols('F',src='yahoo',return.class='ts') [1] "F"
因此,你有一个你想要的东西的字符向量:
> z="F"
> z
[1] "F"

然后就是魔法所在:

> summary(get(z))
     F.Open           F.High           F.Low           F.Close      
 Min.   : 1.310   Min.   : 1.550   Min.   : 1.010   Min.   : 1.260  
 1st Qu.: 5.895   1st Qu.: 6.020   1st Qu.: 5.705   1st Qu.: 5.885  
 Median : 7.950   Median : 8.030   Median : 7.800   Median : 7.920  
 Mean   : 8.358   Mean   : 8.495   Mean   : 8.178   Mean   : 8.332  
 3rd Qu.:11.210   3rd Qu.:11.400   3rd Qu.:11.000   3rd Qu.:11.180  
 Max.   :18.810   Max.   :18.970   Max.   :18.610   Max.   :18.790  

并且如果你不相信我:

> identical(F,get(z))
[1] TRUE

1
感谢阅读注释,真正的问题就嵌入其中了。这正是我想做的——通过名称从环境中获取对象。我曾错误地认为这只是一个简单的去除引号的问题,但那样并没有起作用。现在我有了get()函数。 - Milktrader
1
+1,你所说的话有很多值得学习的地方,谢谢。 - PKumar

6
我只是猜测,这大致符合您想要实现的目标吗?
> a <- "a"
> a
[1] "a" # quote yes
> as.factor(a)
[1] a #quote no

6
如果:
> char<-c("one", "two", "three")

你可以:
> print(char[1],quote = FALSE)

您的结果应该是:

[1] 一


4
最简单的方法是:

> a = "some string"
> write(a, stdout())  # Can specify stderr() also.
some string

如果您需要进行错误处理打印,可以选择将打印输出到stderr


%s 这样的变量? - not2qubit
1
我不确定你在问什么,但也许这可以回答我认为你的问题是什么。如果你想要打印格式,你可以做类似于 a=sprintf("%s %.2f ", "somestring", 5) 然后 write(a, stdout()) 的操作。 - irritable_phd_syndrome

3

我认为我在尝试与原帖非常相似的事情。对我来说,get()方法起作用了,尽管图表内的名称没有被继承。以下是对我有效的代码。

#install it if you dont have it
library(quantmod)

# a list of stock tickers
myStocks <- c("INTC", "AAPL", "GOOG", "LTD")

# get some stock prices from default service
getSymbols(myStocks)

# to pause in between plots
par(ask=TRUE)

# plot all symbols
for (i in 1:length(myStocks)) {
    chartSeries(get(myStocks[i]), subset="last 26 weeks")
}

3

这里是结合noquotepaste的一个例子:

noquote(paste("Argument is of length zero",sQuote("!"),"and",dQuote("double")))


#[1] Argument is of length zero ‘!’ and “double”

3
尝试这个:(即使[1]也会被删除)
> cat(noquote("love"))
love

否则就使用noquote

> noquote("love")
[1] love

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接