R и системные вызовы

Я использовал R в прошлом, чтобы сделать очень простые вызовы линии commmand. Пример можно найти здесь .

На этот раз, я ищу, чтобы имитировать этот код, который успешно запускается из командной строки в Windows:

> cd C:\Documents and Settings\BTIBERT\My Documents\My Dropbox\Eclipse\Projects\R\MLB\retrosheet\rawdata > bgame -y 2010 2010bos.eva >2010bos.txt 

Это код, который я пытаюсь запустить внутри R. Я уже установил рабочий каталог внутри R.

 dir 2010bos.txt") 

Я уверен, что это ошибка пользователя, но что я делаю неправильно? Похоже, что он работает, но возвращает следующую ошибку. Я очень хорошо мог делать что-то неправильно, но я считаю, что я использую те же команды.

 Expanded game descriptor, version 109(185) of 05/08/2008. Type 'bgame -h' for help. Copyright (c) 2001 by DiamondWare. [Processing file 2010bos.eva.] >2010bos.txt: can't open. Warning message: running command 'bgame -y 2010 2010bos.eva >2010bos.txt' had status 2 

Любая помощь, которую вы можете предоставить, будет оценена по достоинству.

Вы должны выдать все команды в одном вызове system() :

 system(paste("cd",getwd() "&& bgame -y 2010 2010bos.eva >2010bos.txt",sep=" ")) 

Вы уже должны быть в своем рабочем каталоге, поэтому я не уверен, что cd getwd() необходим. И вам может понадобиться кавычки вокруг вашего пути, потому что они содержат пробелы. Ошибка может быть решена путем помещения пробелов вокруг > .

Если бы я был на вашем месте, я бы попробовал это:

 system("bgame -y 2010 2010bos.eva > 2010bos.txt") 

ОБНОВИТЬ:

И вы должны, вероятно, прислушаться к этому совету в разделе «Различия между Unix и Windows» в ?system котором говорится, что вы должны использовать shell :

  • The most important difference is that on a Unix-alike 'system' launches a shell which then runs 'command'. On Windows the command is run directly - use 'shell' for an interface which runs 'command' _via_ a shell (by default the Windows shell 'cmd.exe', which has many differences from the POSIX shell). This means that it cannot be assumed that redirection or piping will work in 'system' (redirection sometimes does, but we have seen cases where it stopped working after a Windows security patch), and 'system2' (or 'shell') must be used on Windows. 

Никто, кроме того, не обнаружил, что system("dir", intern = T) например, не работает, но вам нужна system("cmd.exe /c dir", intern = T) ? Только последний работает для меня. Я нашел это на дискуссионном сайте здесь (сообщение Уильяма Данлапа, примерно треть пути вниз).

Кроме того, он не работает с командой «cd», но вы можете использовать setwd() внутри R, а затем команда будет выполнена внутри этого каталога.

Для удобства я создал следующие функции для выполнения программ и запущенных команд:

 #the subject is an input file that a programme might require execute <- function(programme, subject.spec = "", intern = FALSE, wait = FALSE){ if(!identical(subject.spec, "")){subject.spec <- paste0(" ", subject.spec)} #put space before the subject if it exists system(paste0("cmd.exe /c ", programme, subject.spec), intern = intern, wait = wait) } command <- function(command, intern = TRUE, wait = FALSE){ system(paste("cmd.exe /c", command), intern = T, wait = wait) } 

Прерывает ли ваш код код, когда вы получаете ошибку 1 или выполнение продолжается?

Всякий раз, когда выполнение команд системы на другом языке полезно распечатать системный вызов, прежде чем вы вызываете его, чтобы увидеть, что именно происходит, вытащите оболочку, которую вы собираетесь использовать, и проверьте ее на ту же ошибку. Поскольку команда выполняется правильно, это может быть hickup в bgame или R.

Если вы посмотрите на http://astrostatistics.psu.edu/datasets/R/html/base/html/shell.html, вы можете увидеть флаг переменной, переданный системному вызову. “Flag the switch для запуска команды под оболочкой Если shell bash или tcsh, значение по умолчанию изменяется на «-c». »

Также «используемая shell может быть изменена путем установки переменной конфигурации R_SHELL на подходящее значение (полный путь к оболочке, например / usr / local / bin / bash)».

  • Matlab: запуск m-файла из командной строки
  • Удалить последнюю строку из файла в Bash
  • Печать rpath исполняемого файла в OSX
  • Инструмент командной строки для сброса версии Windows DLL?
  • Как удалить все таблицы MySQL из командной строки без разрешений базы данных DROP?
  • как показать общие линии (обратный дифференциал)?
  • Как преобразовать аргумент командной строки в int?
  • Java: проверьте, не соответствуют ли аргументы командной строки
  • Grep и Sed Equivalent для обработки командной строки XML
  • Запуск Java в пакете из командной строки
  • Аргументы process.start ()
  • Давайте будем гением компьютера.