R - Как выполнить PowerShell cmds с system () или system2 () - PullRequest
0 голосов
/ 18 октября 2018

Я работаю в R (в ОС Windows), пытаясь подсчитать количество слов в текстовом файле, не загружая файл в память.Идея состоит в том, чтобы получить некоторую статистику по размеру файла, количеству строк, количеству слов и т. Д. Вызов функции system () R, использующей find для подсчета строк, не составляет труда: Как мневыполните команду «подсчет слов» в командной строке Windows

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 голосов
/ 18 октября 2018

Проблемы - обзор

Итак, у вас есть две проблемы:

  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 вызывает команду ОС, указанную командой.

Одна из основных проблем заключается в том, что Measure-Object - это не системная команда, а команда PowerShell.Системная команда для PowerShell - это powershell, и это то, что вам нужно для вызова.

Тогда, кроме того, у вас не совсем был правильный синтаксис PowerShell.Если вы посмотрите на документы , вы увидите, что действительно нужна команда PowerShell

Get-Content C:/Users/User/Documents/count_words.txt | Measure-Object -Word

(см. Пример три в связанной документации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...