2013-02-20 28 views
8

Tôi muốn sử dụng RStudio để chỉnh sửa một R-script có thông số dòng lệnh, ví dụ,Có thể chỉ định tham số dòng lệnh cho R-script trong RStudio không?

my_rscript --dataset mydataset 

và sau đó để đọc các giá trị optiion vào một biến R, nói, dataset, ví dụ, sử dụng optparse thư viện.

Tuy nhiên, tôi không thể tìm thấy nơi dòng có thể được cung cấp trong RStudio, để tôi có thể sử dụng tính năng "Nguồn khi lưu". Thay vào đó, tôi phải mã hóa tất cả các tham số chương trình trong chính chương trình:

dataset <- "mydataset" 

yêu cầu sửa đổi văn bản tập lệnh mỗi lần tôi cần chỉ định dữ liệu khác nhau.

Có ai biết cách cung cấp thông tin dòng lệnh không?

+0

Câu hỏi của bạn không có vẻ là có liên quan đặc biệt để RStudio, nhưng tổng quát hơn cho R, vì vậy tôi retagged nó. Nếu đây không phải là ý của bạn, thì bạn nên chỉnh sửa câu hỏi của mình. – TARehman

Trả lời

5

Tôi biết câu hỏi này là cũ và liên kết dưới đây là cũ, nhưng nó trả lời câu hỏi. Không, không thể (hoặc không phải là ngày 29 tháng 1 năm 2012) để truy cập các đối số dòng lệnh từ RStudio.

Liên kết https://support.rstudio.com/hc/communities/public/questions/200659066-Accessing-command-line-options-in-RStudio?locale=en-us

+6

Điều này có thể đúng về mặt kỹ thuật, nhưng rõ ràng là có thể (và luôn luôn có thể) để chuyển các đối số thông qua 'hệ thống ("rscript myscript.r -a -b -c") 'mà người ta có thể thực thi từ bàn điều khiển RStudio - xem câu trả lời từ @biocyberman, tôi nghĩ rằng nên là câu trả lời được chấp nhận – andreister

3

Bạn có thể gọi cho chương trình của mình bằng cách sử dụng Rscript programname.r arg1 arg2 arg3. Các đối số được truyền cho commandArgs, vì vậy sau đây sẽ là đúng:

Rscript programname.r F N 32 

> args <- commandArgs(trailingOnly=TRUE) 
> args[1] 
[1] F 
> args[2] 
[1] N 
> args[3] 
[1] 32 
14

Để bây giờ tôi làm điều đó theo cách này: Mở một cửa sổ mới chỉnh sửa Rscript mới. Nếu tôi muốn giữ nó tôi có thể lưu và đặt tên cho nó cái gì đó như: test_myscript.R Đây là nội dung của test_myscript.R:

debug(getopt) # suppose I want to debug 'getopt' function in 'myscript.R' 
system("myscript.R -a -b -c") 
# Debug process start after this. 
# Check ?browser for help about navigating inside browser 
0

Đây thực sự là cũ nhưng tôi stumbled trên nó khi cố gắng làm điều tương tự và tôi đã kết thúc chỉ cần cố gắng điều sau đây, và là tốt đẹp và nhanh chóng nếu mọi người muốn thử nó (có lẽ chỉ hữu ích cho các lệnh đó có một vài args dễ dàng mặc dù):

với Rscript tôi mà hiện nay bắt đầu:

args <- commandArgs(TRUE) 
df <- read.csv(args[1], sep=",", check.names=FALSE, row.names = 1) 
. 
. # Do some analysis and plotting etc. 
. 

Nếu tôi muốn bắt chước dòng lệnh rằng Rscript nếu không sẽ nhận được, bạn có thể làm cho các vector args lên 'bằng tay':

args <- c("/path/to/my/inputfile.csv") 

sau đó args[1] mất trên cùng giá trị nó luôn luôn sẽ có. và tôi chỉ cần chạy mọi thứ khác trong kịch bản bằng cách làm nổi bật và thực hiện trong RStudio.

+0

Làm thế nào để bạn đặt 'args' bên ngoài kịch bản theo cách mà' args <- commandArgs (TRUE) 'bên trong tập lệnh không ghi đè lên chúng? –

1

này đã làm việc cho tôi: Rscript của tôi là như sau:

args <- commandArgs() 
print(paste0("args:", args)) 
print(paste0("args[1]:",args[1])) 
print(paste0("args[2]:",args[2])) 
print(paste0("args[3]:",args[3])) 
print(paste0("# of args:",length(args))) 

'

Để cạnh tranh với các dòng lệnh đầu vào Tôi sẽ sử dụng với Rscript, tôi bước này trong RStudio:

commandArgs <- function() c("AMZN", 10, 200)

cho kết quả mong muốn:

[1] "args:AMZN" "args:10" "args:200" 
[1] "args[1]:AMZN" 
[1] "args[2]:10" 
[1] "args[3]:200" 
[1] "# of args:3" 
+0

Bạn vĩnh viễn thay đổi hàm 'commandArgs()'. IMHO đó là một giải pháp kém. –

1

Nếu bạn quan tâm đến việc sử dụng ví dụ: argparser và tiếp tục phát triển/phân tích một cách tương tác sử dụng Rstudio, bạn có thể sử dụng sau công việc xung quanh:

  1. Viết phân tích cú pháp dòng lệnh của bạn trong my_rscript và tạo ra một đối tượng args có chứa tất cả các đầu vào phân tích cú pháp.
  2. Thêm một dòng để lưu args đối tượng cần nộp.
  3. Chạy my_rscript từ dòng lệnh và chỉ định đối số quan tâm.
  4. Tải các đối tượng args từ tập tin trong Rstudio và tiếp tục tương tác

Ví dụ:

library("argparser") 
parser <- arg_parser(description='Process commandline arguments') 
parser <- add_argument(parser, arg="--dataset", type="character", help = "Dataset argument") 
args = parse_args(parser) 
args_file = "tempArgObjectFile.rds" 
saveRDS(args, args_file); print(args); quit(); #comment this after creating args_file 
args = readRDS(args_file) #use this to load during interactive development 
Các vấn đề liên quan