【问题标题】:Remove quotes from a character vector in R从 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,虽然很难说什么会起作用。

标签: r quotes


【解决方案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 上发布答案的更多信息。 stackoverflow.com/tourstackoverflow.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
            

            【讨论】:

              猜你喜欢
              • 2015-03-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-24
              • 2011-11-03
              • 2013-07-19
              相关资源
              最近更新 更多