【问题标题】:convert names to character strings [duplicate]将名称转换为字符串[重复]
【发布时间】:2015-07-26 14:18:59
【问题描述】:

我遇到了一个元编程任务,似乎它必须有一个明显而简单的答案,但我找不到。

我有一堆名字包裹在():

(foo, bar, buzz, zap)

我想快速将这些名称转换为字符向量:

("foo", "bar", "buzz", "zap")

我能想到的最快的如下:

as.character(quote(c(foo, bar, buzz, zap)))[-1]
# "foo"  "bar"  "buzz" "zap" 

我不得不想象有一个更清洁的解决方案。

编辑

可能重复,只是标题不同,所以很难发现: Does R have quote-like operators like Perl's qw()?

【问题讨论】:

  • “拥有”是指您使用 Perl 或其他类似方法将c(foo, bar, buzz, zap) 元写入程序主体?如果是这样,您可以使用该工具以更适合 R 的方式编写它,例如不带括号...
  • 不,我对您在 R 中工作的用例类型感兴趣,并且会使用文本编辑器解决此类问题以节省输入时间。我不是在谈论将参数传递给程序,它有很多可行的解决方案。
  • 我不确定我是否理解这个问题,但也许这些是相关的:stackoverflow.com/q/520810/1191259 我一直在使用类似 flodel 的 qw
  • @Frank 是的,这更像是解决方案的味道。

标签: r


【解决方案1】:

一个。选项1

 k<-"(foo, bar, buzz, zap)"
    strsplit(strsplit(k,"\\(|\\)")[[1]][2],", ")[[1]]
    [1] "foo"  "bar"  "buzz" "zap" 

b.选项 2

library(stringr)
str_extract_all(k,"[aA-zZ]+")[[1]] #assuming that it only contains letters
[1] "foo"  "bar"  "buzz" "zap"

【讨论】:

  • 返回单个字符串,而不是字符串向量。
  • 感谢您的评论。我现在已经编辑了我的答案。
  • 你在嗡嗡声和电击之前有空格......加上这是一个非常激烈的正则表达式
  • 拆分 ", " 而不是 "," 以删除空格。
  • 感谢本和弗兰克。现在编辑并建议第二个选项。
【解决方案2】:
strsplit("foo, bar, buzz, zap",',')[[1]]

【讨论】:

  • 根据 OP,字符串用括号括起来:"(foo, bar, buzz, zap)" 而不是 "foo, bar, buzz, zap"。
猜你喜欢
  • 2012-03-10
  • 2014-05-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2013-01-12
  • 2015-04-02
  • 2012-02-22
相关资源
最近更新 更多