【问题标题】:Quick way to turn copied text to character strings in R?在R中将复制的文本转换为字符串的快速方法?
【发布时间】:2017-02-17 12:01:22
【问题描述】:

我有一个从 R 外部复制的文本列表:

  • 例如:a、b、c、d、e、f、g、h、i、j

我只想快速将每个单词(在本例中为字母)转换为字符串供 R 使用:

  • 例如:'a'、'b'、'c'、'd'、'e'、'f'、'g'、'h'、'i'、'j'

有没有把外部文本转成字符串的函数或者快捷方式?

例子:

> a,b,c,d
Error: unexpected ',' in "a,"

> function(a,b,c,d)
[1] 'a','b','c','d'

我知道一个简单的函数可能无法工作,因为它会假定非字符串是未知的 R 对象。但是可能有一些技巧可以使这项工作发挥作用?

注意:我知道我可以在其他程序(例如记事本 ++)中相当快地做到这一点,但我想知道在 R 中是否有可能做到这一点?

【问题讨论】:

  • 您可以使用 scanscan(text='a, b, c, d, e, f, g, h, i, j',what = "", sep=",", quiet=TRUE) 。如果存储在文件scan("yourfile.txt", what ="", sep=",", quiet=TRUE)
  • f <- function(..., simplify = TRUE) sapply(eval(substitute(alist(...))), function(x) if (is.symbol(x)) as.character(x) else eval(x), simplify = simplify); f(a, b, c, d, e, f, g, h, i, j) 与其他事物一起使用 f(a, one = 1, two, x = rnorm(10))
  • 你还需要strip.white = TRUE in scan()
  • @RichScriven 好电话。

标签: r string function character shortcut


【解决方案1】:

这很简单:

我先复制a,b,c,dR

z <- readClipboard()
z
[1] "a,b,c,d"

然后你就可以玩弄它了。示例:

strsplit(z, split = ",")
[[1]]
[1] "a" "b" "c" "d"

编辑: 这仅适用于 Windows。感谢@Gregor 的评论。

【讨论】:

  • 我不知道为什么其他人只将答案放在 cmets 中。
  • 这很愚蠢,但我有时会为此感到内疚。通常是因为 1)我觉得我写的内容不够详尽,无法被视为完整的“答案”,或者 2)我没有实际测试过解决方案。
  • 我有这种模棱两可的感觉,我觉得我的答案已经足够详细地回答这个问题,但几乎没有比 cmets 中的那些更详细或更好。
  • 你做对了。即使在这些情况下,我提到通常写一个答案比评论更合适,但我们中的一些人选择走评论路线,因为它更安全,或者我们很懒,不想提供我们不 100% 支持的答案在后面。答案是正确的方法,所以你做了正确的事。
【解决方案2】:

这是一个使用read.table 和剪贴板的简单解决方案(如herehere 所示):

  1. 将文本或数据复制到剪贴板。

  2. 使用以下代码:

    read.table("clipboard", head = T, sep = z)
    
    • 其中 z 是 "," 用于逗号分隔,"\t" 用于制表符分隔,等等。

使用scan 也是一个不错的选择:

scan(text='a, b, c, d, e, f, g, h, i, j',what = "", sep=",", quiet=TRUE, strip.white = TRUE)

(来自 akrun 和 Rich Scriven 的 cmets)。


如果是带有标题的表格(例如,从 MS Excel 复制的文本),read.table 方法会更快并保持文本的结构。因此,如果您要复制具有结构的数据,请使用read.table

如果您只是复制文本(尤其是如果您只想将其直接复制到脚本中),那么扫描方法就足够了,并且“更透明”。

【讨论】:

  • 请注意,read.table 中的“剪贴板”字符串仅适用于 Windows。
  • @Gregor:谢谢。作为一个严格的 Windows 用户,我不知道。您知道非 Windows 用户的解决方法吗?我会相应地更新我的答案...
  • 我的工作计算机最近切换到 Mac,所以它在我的脑海中很新鲜 ;) 我发现的最好的方法是使用 text 参数作为 read.table 的参数,正如您在 scan 中显示的那样,只是粘贴到字符串中。
猜你喜欢
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多