R-如何使用system()或system2()执行PowerShell cmds

时间:2018-10-18 16:36:22

标签: r powershell cmd operating-system

我在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时调用该函数的正确语法是什么?为什么无论实际字数如何,返回的值都相同?

1 个答案:

答案 0 :(得分:2)

问题-概述

因此,您在这里遇到了两个问题:

  1. 您不是在告诉system2()使用powershell
  2. 您没有使用正确的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

(在链接的文档中查看示例三)。