我正在尝试创建一个使用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
如何防止这种情况发生,或者至少将电子表格中每一行的一堆文本视为一个向量?
答案 0 :(得分:1)
如果我理解正确,问题是当用户从另一个应用程序粘贴文本时:换行符导致R停止接受后续行。
一种技术(尽管可能很脆弱)是寻找特定的行,例如空行""
或句号"."
。它有点脆弱,因为现在你需要(1)保证数据“永远不会”包含整行,并且(2)它很容易被用户附加。
尝试:
endofinput <- ""
totalstr <- ""
while(! endofinput == (x <- readline('prompt (empty string when done): ')))
totalstr <- paste(totalstr, x)
在这种情况下,空字符串是catch,当while
循环完成时,totalstr
包含由空格分隔的所有输入(可以在paste
中更改功能)。
totalstr
,这最终将导致性能损失(取决于输入数据的大小):每次循环迭代,分配更多内存并复制整个字符串加上新的文本行。有更多冗长的方法来解决这个问题(例如,预先分配一个大于预期输入数据的向量),但如果你没有预料到1000行,那么你可以接受这种简单的编程。
另一种选择是让用户将数据保存到文本文件中,并使用file.choose()
和readLines()
来获取数据。
答案 1 :(得分:0)
使用readline
x <- paste(readline(as.character('Input text here: ')), collapse=' ')