2012-12-05 32 views
17

Sử dụng lệnh paste trong R, tôi muốn sử dụng cả hai đối số sepcollapse, nhưng bạn không thể viết tắt collapse thành coll hoặc thậm chí collaps. Tuy nhiên, đối với các chức năng viết tắt một phần khác.Tên viết tắt của "sụp đổ" trong dán?

Không có đối số nào khác để thu gọn bắt đầu bằng coll, điều này sẽ ảnh hưởng đến đối sánh một phần.

Tại sao tôi phải nhập toàn bộ tên đối số khi gọi paste, khi nào tôi không phải thực hiện các chức năng khác?

+4

tôi sẽ thực sự thực sự không sử dụng loại chữ viết tắt vì nó khó đọc hơn và có thể có những hậu quả không tốt vì việc mở rộng có thể dẫn đến sai lầm kết hợp thông số. –

Trả lời

22

Tôi tin rằng đó là ... trong quá trình dán khiến bạn phải sử dụng đối sánh chính xác. Cụ thể, thực tế là ,collapse đến sau số ... trong danh sách đối số.

diễn:

f1 <- function(x, collapse) cat("collapse",collapse) 
f2 <- function(..., collapse) cat("collapse",collapse) 
f3 <- function(collapse, ...) cat("collapse",collapse) 

> f1(c="test",1) 
collapse test 
> f2(1,c="test") 
Error in base::cat(...) : argument "collapse" is missing, with no default 
> f2(1,collapse="test") 
collapse test 
> f3(c="test",1) 
collapse test 
+1

Đây cũng là sự hiểu biết của tôi. Có một cảnh báo "ở đâu đó" trong tài liệu R mà bất kỳ đối số nào được đặt tên theo sau '...' không thể rút ngắn được. –

+7

Nó được ghi lại trong [phần 4.3.2 Đối sánh đối số] (http://cran.r-project.org/doc/manuals/R-lang.html#Argument-matching) của [Định nghĩa ngôn ngữ R] (http: // cran.r-project.org/doc/manuals/R-lang.html). –

+1

Vì vậy, các hacker trong tôi gợi ý 'mypaste <-function (sep =" ", collapse = NULL, ...) dán (sep, collapse, ...)' :-) –

2

Một chức năng wrapper có thể hữu ích, giống như paste0

p <- function(..., s=" ", clap=NULL) { # or whichever abbreviation you prefer. I originally had `col`, but that was dumb. 
    paste(..., sep=s, collapse=clap) 
} 

p0 <- function(..., clap=NULL) { 
    paste(..., sep="", collapse=clap) 
} 

ví dụ:

p(c("hello", "world"), c("abc", "123"), clap="$") 
# [1] "hello abc$world 123" 


p0(c("hello", "world"), c("abc", "123"), clap="$") 
# [1] "helloabc$world123" 
+0

Mặc dù điều này có thể được sử dụng cho OP , Tôi không nghĩ rằng nó thực sự trả lời câu hỏi của * tại sao * viết tắt không hoạt động, mà câu trả lời của Ari không ... – A5C1D2H2I1M1N2O1R2T1

+0

@Carl, cảm ơn vì đã dọn dẹp. Ananda: Tôi nghĩ bạn đúng về tính chính xác, điều này có thể hữu ích cho OP. Tôi nghĩ rằng Ari đã làm một công việc tuyệt vời trả lời lý do tại sao –

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