2015-07-20 16 views
6

Tôi có một tập lệnh PowerShell (nói tại C: \ directoryName \ coolScript.ps1). Nếu tôi muốn gọi này từ R, tôi có thể chạyChạy tập lệnh Powershell từ R sử dụng system2() thay vì hệ thống()?

system('powershell -file "C:\\directoryName\\coolScript.ps1"') 

Nếu tôi cố gắng làm điều tương tự với system2(), nó sẽ trả về không có lỗi, nhưng kịch bản không được thực thi. Vì tài liệu cho lệnh system() nói rằng system2() "được khuyến nghị cho mã mới", tôi muốn sử dụng system2(). Có cách nào để làm việc này không?

Trả lời

11

Không giống như system, system2() lệnh luôn được trích dẫn bởi shQuote, do đó, nó phải là một lệnh duy nhất không có đối số.

Cả hai hoạt động:

system("sed -i 's/oldword\\s/oldword/g' d:/junk/x/test.tex") 
system2("sed", args=c("-i", "s/oldword\\s/newword/g", "d:/junk/x/test.tex")) 

tôi sẽ cố gắng:

system2("powershell", args=c("-file", "C:\\directoryName\\coolScript.ps1")) 

Một điều bạn cần phải nhận thức là có hai phiên bản của R thực thi trong R-3.2.1 \ bin \ i386 (32 bit) và R-3.2.1 \ bin \ x64 (64 bit). Theo mặc định, phiên bản đầu tiên được cài đặt trên các phiên bản Windows 32 bit, nhưng cả trên các hệ điều hành 64 bit. Phiên bản 32 bit của R sẽ gọi phiên bản 32 bit của PowerShell và giống với phiên bản 64 bit, vì vậy hãy cẩn thận sử dụng Set-ExecutionPolicy cho phiên bản đúng.

+0

Có lẽ nếu ai đó đang nhận lệnh gọi 'system ('powershell ...')' thì họ đã thiết lập chính sách thực thi liên quan, nhưng điểm đó là cần thiết để có 'system2()' để có được mong muốn hiệu lực cho những người đến đây mà không có một cuộc gọi 'system()' đang hoạt động. – randy

+0

Không gian ở cuối "powershell" trong lệnh 'system2()' cần được xóa để làm việc, nhưng tôi không thể chỉnh sửa câu trả lời của bạn trừ khi chỉnh sửa có ít nhất 6 ký tự. Chỉnh sửa câu trả lời để xóa không gian và tôi sẽ đánh dấu giải pháp này là giải pháp. – randy

Các vấn đề liên quan