我在R(在Windows操作系统上)中工作,试图计算文本文件中的单词数而不将文件加载到内存中。想法是获取有关文件大小,行数,字数等的统计信息。使用find
作为行数的R的system()函数调用并不难实现:
How do I do a "word count" command in Windows Command Prompt
lineCount <- system(paste0('find /c /v "" ', path), intern = T)
我要使用的用于字数统计的命令是PowerShell命令:Measure-Object
。我可以使以下代码运行而不会引发错误,但返回的计数不正确。
print(system2("Measure-Object", args = c('count_words.txt', '-Word')))
[1] 127
文件count_words.txt
具有数百万个单词。我还用更少的单词在.txt文件上进行了测试。
"There are seven words in this file."
但计数再次返回127。
print(system2("Measure-Object", args = c('seven_words.txt', '-Word')))
[1] 127
system2()
是否可以识别PowerShell命令?使用Measure-Object
时调用该函数的正确语法是什么?为什么无论实际字数如何,返回的值都相同?
答案 0 :(得分:2)
因此,您在这里遇到了两个问题:
system2()
使用powershell command <- "Get-Content C:/Users/User/Documents/test1.txt | Measure-Object -Word"
system2("powershell", args = command)
使用文件的路径替换C:/Users/User/Documents/test2.txt
的位置。我创建了两个.txt文件,其中一个带有文本“此文件中有七个单词”。另一个带有文本“但是此文件中有八个单词”。然后,我在R中运行以下代码:
command <- "Get-Content C:/Users/User/Documents/test1.txt | Measure-Object -Word"
system2("powershell", args = command)
Lines Words Characters Property
----- ----- ---------- --------
7
command <- "Get-Content C:/Users/User/Documents/test2.txt | Measure-Object -Word"
system2("powershell", args = command)
Lines Words Characters Property
----- ----- ---------- --------
8
来自help("system2")
:
system2调用由command指定的OS命令。
一个主要问题是Measure-Object
不是系统命令,而是PowerShell命令。 PowerShell的系统命令是powershell
,这是您需要调用的命令。
然后,此外,您还没有正确的PowerShell语法。如果您查看the docs,将会看到您真正想要的PowerShell命令
Get-Content C:/Users/User/Documents/count_words.txt | Measure-Object -Word
(在链接的文档中查看示例三)。