Trong tài liệu của sapply
và replicate
có một cảnh báo liên quan đến sử dụng ...
Sử dụng "..." và 'tái tạo'
Bây giờ, tôi có thể chấp nhận nó như vậy, nhưng muốn hiểu những gì đằng sau nó. Vì vậy, tôi đã tạo ví dụ này ít gây tranh cãi:
innerfunction<-function(x, extrapar1=0, extrapar2=extrapar1)
{
cat("x:", x, ", xp1:", extrapar1, ", xp2:", extrapar2, "\n")
}
middlefunction<-function(x,...)
{
innerfunction(x,...)
}
outerfunction<-function(x, ...)
{
cat("Run middle function:\n")
replicate(2, middlefunction(x,...))
cat("Run inner function:\n")
replicate(2, innerfunction(x,...))
}
outerfunction(1,2,3)
outerfunction(1,extrapar1=2,3)
outerfunction(1,extrapar1=2,extrapar2=3)
Có lẽ tôi đã làm điều gì đó rõ ràng khủng khiếp sai, nhưng tôi thấy kết quả của điều này khá khó chịu. Vì vậy, bất cứ ai có thể giải thích cho tôi tại sao, trong tất cả các cuộc gọi trên để outerfunction
, tôi nhận được kết quả này:
Run middle function:
x: 1 , xp1: 0 , xp2: 0
x: 1 , xp1: 0 , xp2: 0
Run inner function:
x: 1 , xp1: 0 , xp2: 0
x: 1 , xp1: 0 , xp2: 0
Như tôi đã nói: các tài liệu dường như để cảnh báo cho điều này, nhưng tôi không hiểu tại sao đây là quá .
Lưu ý rằng trong ví dụ này, sự kiện "đúng" cách không hoạt động đúng - nó được nhân đôi 'x' lần (3) thay vì' n' lần (5). – James
@James - không có trên hệ thống của tôi. Tôi nhận được ma trận 2 * 5 cho 'bar (5, x = 3)' –
Rất tiếc, lỗi của tôi. Đã có lỗi đánh máy khi sao chép các ví dụ. – James