首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用system()或system2()执行system2 cmds

如何使用system()或system2()执行system2 cmds
EN

Stack Overflow用户
提问于 2018-10-18 16:36:21
回答 1查看 1.1K关注 0票数 1

我在R中工作(在Windows操作系统上),试图在不将文件加载到内存的情况下计算文本文件中的字数。这样做的目的是获取文件大小、行数、字数等方面的统计数据。调用R的system()函数,使用find进行行计数,并不难:如何在Windows命令提示符中执行“单词计数”命令

代码语言:javascript
复制
lineCount <- system(paste0('find /c /v "" ', path), intern = T)

我试图使用的单词计数命令是一个PowerShell命令:Measure-Object。我可以在不抛出错误的情况下运行以下代码,但它返回一个不正确的计数。

代码语言:javascript
复制
print(system2("Measure-Object", args = c('count_words.txt', '-Word')))
[1] 127

该文件,count_words.txt上有数百万字左右。我还用更少的单词在一个.txt文件上测试了它。

代码语言:javascript
复制
"There are seven words in this file."

但是,伯爵再次返回为127。

代码语言:javascript
复制
print(system2("Measure-Object", args = c('seven_words.txt', '-Word')))
[1] 127

system2()是否识别PowerShell命令?使用Measure-Object时调用函数的正确语法是什么?为什么不管实际单词数如何,它都返回相同的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 17:54:32

问题--概览

所以,这里有两个问题:

  1. 您没有告诉system2()使用powershell
  2. 您没有使用正确的powershell语法

解决方案

代码语言:javascript
复制
command <- "Get-Content C:/Users/User/Documents/test1.txt | Measure-Object -Word"
system2("powershell", args = command)

C:/Users/User/Documents/test2.txt替换为文件的任何路径。我创建了两个.txt文件,其中一个文件的文本是“这个文件中有七个单词”。另一篇文章是“但是这个文件里有八个字。”然后,我在R中运行了以下代码:

代码语言:javascript
复制
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调用命令指定的OS命令。

一个主要问题是,Measure-Object不是一个系统命令--它是一个PowerShell命令。PowerShell的系统命令是powershell,这是您需要调用的。

此外,您还没有正确的PowerShell语法。如果您查看一下医生们,您将看到您真正想要的PowerShell命令是

代码语言:javascript
复制
Get-Content C:/Users/User/Documents/count_words.txt | Measure-Object -Word

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52878730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档