Chạy một kịch bản R từng dòng một


8

Tôi vừa tìm ra cách chạy tập lệnh R từ Bảng điều khiển R trong Windows.

source("arrrFile.R")

Vấn đề là, lệnh này chạy "âm thầm". Làm cách nào tôi có thể chạy tệp lệnh theo lệnh khi tôi nhập tệp trong bảng điều khiển?


5
Bạn đã thử source("arrFile.R", echo=TRUE)chưa
caracal

(+1) @caracal, bằng cách nào đó đã bỏ lỡ một tùy chọn đó :) không cần đưa printvào tệp nguồn, trừ khi một số đầu ra không thú vị.
Dmitrij Celov

Câu trả lời:


16

Bạn có thể sử dụng trình gỡ lỗi tích hợp của R; nó phải được kích hoạt trên một hàm, vì vậy cần có một trình bao bọc nhỏ:

sourceDebugging<-function(f){
 #Function to inject the code to
 theCode<-function(){}
 #Injection
 parse(text=c('{',readLines(f),'}'))->body(theCode)
 #Triggering debug
 debug(theCode)
 #Lift-off
 theCode()
}
sourceDebugging(<file with code>)

Điều này khá thuận tiện cho việc gỡ lỗi (tuy nhiên, cho bạn cơ hội kiểm tra trạng thái sau mỗi dòng), tuy nhiên, sẽ chỉ đánh giá trong một môi trường mới theCodethay vì sourcemặc định .GlobalEnv... điều này có nghĩa là các biến được tạo bên trong sẽ biến mất trừ khi toàn cầu hóa rõ ràng.

Tùy chọn hai chỉ là giả lập văn bản từ bàn phím và nhấn ENTER ... nhưng như caracal đã chỉ ra điều này có thể đạt được chỉ bằng cách source(<file with code>,echo=TRUE).


(+1) cũng nên viết các tệp nguồn dưới dạng các hàm và sau đó debug() browser()rất hữu ích :)
Dmitrij Celov

1
cũng là vanilla, cho thấy cách một lệnh thực thi theo dòng R-2.12 --vanilla <yourfile.R
user4581

1
phương pháp nào để vượt qua cũng tham số?
gc5

Có vẻ như các số được bù bởi 1 do định nghĩa hàm. Có một cách thông minh xung quanh đó?
irritable_phd_syndrom

10

Mở tệp tập lệnh bên trong RGui của bạn và nhấn Ctrl + R để chạy từng dòng (bạn cần nhấn nhiều lần;)). Tuy nhiên, tôi khuyên bạn nên sử dụng RStudio để làm việc thuận tiện với R. Trong trường hợp này, bạn chạy dòng bằng Ctrl + Enter . Hoặc bạn có thể sửa đổi tập lệnh của mình thành print()(hoặc cat()) các đối tượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.