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

Posted

技术标签:

【中文标题】从 R 中的字符向量中删除引号【英文标题】:Remove quotes from a character vector in R 【发布时间】:2011-07-10 02:02:41 【问题描述】:

假设你有一个字符向量:

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

当您引用索引值时,您会得到以下信息:

> char[1]
[1] "one"

如何从返回值中去掉引号得到以下内容?

[1] one

【问题讨论】:

所以你只是想在打印到标准输出(或文件)时删除引号? 我正在尝试通过函数循环字符向量的元素,但我需要关闭引号。 我想我仍然不明白确切的目的——也许发布使用示例会有所帮助 cat("[1]", char[1], "\n")?开个玩笑……我不太明白你在做什么…… 我也不知道我是否了解您的用例,但我认为您可能想要 as.symbol() 或 as.name() 代替。如果这是来自一个包,你的函数可能需要一个符号,而不是一个 noquote,虽然很难说什么会起作用。 【参考方案1】:

as.name(char[1]) 会起作用,虽然我不确定你为什么真的想这样做——例如 paste 中的引号不会被继承:

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

【讨论】:

as.name() 和 as.symbol() 都将 char[1] 元素转换为“name”类。 noquote() 将 char[1] 元素转换为 "noquote" 类。嗯,我不知道 R 有这么多类。谢谢。 @AlexArgus 作为 noquote("a") 给出了一个更简单的解决方案 as.nameas.symbolget 都只允许小于 10000 字节的名称。 noquote 没有这个限制。 嗯,有谁知道如何在noquote 之后获得 character 类,但 没有 引号?【参考方案2】:

我只是在猜测,这是不是你想要达到的目标?

> a <- "a"
> a
[1] "a" # quote yes
> as.factor(a)
[1] a #quote no

【讨论】:

【参考方案3】:

您将 quantmod 的“符号”(与某些金融事物的代码相关的术语)与 R 的“符号”混淆了,后者是 R 中的“类型”。

你说过:

我有一个股票的特征向量 我传递给的符号 quantmod::getSymbols() 和 函数将符号返回给 没有引号的环境

差不多吧。它所做的是在指定的环境中创建具有这些名称的对象。我认为您想要做的是通过名称将事物从环境中取出。为此,您需要“获取”。以下是示例代码在默认环境中的工作方式:

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

【讨论】:

感谢您阅读 cmets,其中嵌入了真正的问题。这正是我想要做的 - 按名称将对象从环境中取出。我错误地认为这只是一个删除引号的问题,但这没有用。现在我有了 get()。 +1 ,从您所说的中可以学到很多东西,谢谢。【参考方案4】:

返回值中没有引号,仅在显示值时 print() 的默认输出中。试试

> print(char[1], quote=FALSE)
[1] one

> cat(char[1], "\n")
one

查看不带引号的值。

【讨论】:

【参考方案5】:

我想我正在尝试一些与原始海报非常相似的东西。 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")

【讨论】:

【参考方案6】:

num 函数:)

> nump <- function(x) print(formatC(x, format="fg", big.mark=","), quote=FALSE)

正确答案:

x

> nump(x)

[1] 1,234,567,890,123,456 

【讨论】:

欢迎您。不需要在你的答案中包含错误的答案,你应该只输入正确的答案。我还建议您查看我们的 Tour and Help 部分,以了解有关在 SO 上发布答案的更多信息。 ***.com/tour***.com/help祝你好运。【参考方案7】:

试试 noquote(a)

noquote("a")

[1] 一个

【讨论】:

很好的答案!我已经使用 R 9 年了,而且我一直在学习很酷的新功能。【参考方案8】:

如果:

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

你可以:

> print(char[1],quote = FALSE)

你的结果应该是:

[1] one

【讨论】:

【参考方案9】:

最简单的方法是:

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

如果您正在执行一些错误处理打印,则可以选择打印到 stderr

【讨论】:

带变量,比如%s? 我不太确定你的问题,但也许这回答了我认为你的问题。如果你想要打印格式,你可以做类似a=sprintf("%s %.2f ", "somestring", 5) 然后write(a, stdout())【参考方案10】:

这是noquotepaste 的组合:

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


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

【讨论】:

【参考方案11】:

试试这个:(甚至 [1] 也会被删除)

> cat(noquote("love"))
love

否则只使用 noquote

> noquote("love")
[1] love

【讨论】:

以上是关于从 R 中的字符向量中删除引号的主要内容,如果未能解决你的问题,请参考以下文章

根据 R 中的特定列名从字符向量中删除逗号

从R中的字母数字字符中删除前导零

如何有条件地删除 R 中 write.csv 中的双引号

如何在 R 中显示带引号的文本? [复制]

从R中的字符向量中提取数字和下一个字符串

使用 regexp_extract 从 BigQuery 中删除单引号和双引号