readline正在考虑将电子表格中的每条记录作为新行[R]

时间:2014-05-01 15:37:12

标签: r readline

我正在尝试创建一个使用TM包计算关键字频率的函数。如果从readline粘贴的文本是在没有换行的自由格式文本上,则该函数可以正常工作。问题是,当我粘贴从电子表格复制的一堆文本时,readline会将其视为新行。

keyword <- function() {
x <- readline(as.character('Input text here: '))
x <- Corpus(VectorSource(x))
...
tdm <- TermDocumentMatrix(x)
...
tdm
}

以下是完整代码:https://github.com/CSCDataAnalytics/PM-Analysis/blob/master/Keyword.R

如何防止这种情况发生,或者至少将电子表格中每一行的一堆文本视为一个向量?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,问题是当用户从另一个应用程序粘贴文本时:换行符导致R停止接受后续行。

一种技术(尽管可能很脆弱)是寻找特定的行,例如空行""或句号"."。它有点脆弱,因为现在你需要(1)保证数据“永远不会”包含整行,并且(2)它很容易被用户附加。

尝试:

endofinput <- ""
totalstr <- ""
while(! endofinput == (x <- readline('prompt (empty string when done): ')))
    totalstr <- paste(totalstr, x)

在这种情况下,空字符串是catch,当while循环完成时,totalstr包含由空格分隔的所有输入(可以在paste中更改功能)。

NB:这种技术的一个问题是它正在“增长”向量totalstr,这最终将导致性能损失(取决于输入数据的大小):每次循环迭代,分配更多内存并复制整个字符串加上新的文本行。有更多冗长的方法来解决这个问题(例如,预先分配一个大于预期输入数据的向量),但如果你没有预料到1000行,那么你可以接受这种简单的编程。

另一种选择是让用户将数据保存到文本文件中,并使用file.choose()readLines()来获取数据。

答案 1 :(得分:0)

使用readline

后,尝试将数据折叠为单个字符串
x <- paste(readline(as.character('Input text here: ')), collapse=' ')