Một tính năng thú vị của R liên quan đến tính chất vectơ vốn có của nó là quy tắc tái chế được mô tả trong An Introduction to R trong Phần 2.2.Thực hiện các quy tắc tái chế tiêu chuẩn
Vectơ xảy ra trong cùng một biểu thức không nhất thiết phải cùng chiều dài. Nếu không, giá trị của biểu thức là một vectơ có cùng độ dài với vectơ dài nhất xuất hiện trong biểu thức. Các vector ngắn hơn trong biểu thức là tái chế thường xuyên như cần (có lẽ là phân đoạn) cho đến khi chúng khớp với độ dài của vectơ dài nhất. Đặc biệt một hằng số được lặp lại đơn giản.
Hầu hết các chức năng tiêu chuẩn đều sử dụng mã này, nhưng mã được làm như vậy được chôn trong mã C cơ bản.
Có cách nào để thực thi quy tắc tái chế tiêu chuẩn cho một hàm hoàn toàn bằng mã R không? Đó là, cho một chức năng như
mock <- function(a, b, c) {
# turn a, b, and c into appropriate recycled versions
# do something with recycled a, b, and c in some appropriately vectorized way
}
nơi a
, b
và c
là vectơ, có thể có độ dài khác nhau và các loại/classes không rõ, là có một cách kinh điển để có được một bộ mới của vectơ đó được tái chế theo theo các quy tắc tái chế tiêu chuẩn? Đặc biệt, tôi không thể giả định rằng "làm một cái gì đó" bước sẽ làm việc tái chế thích hợp chính nó, vì vậy tôi cần phải làm điều đó bản thân mình trước.
+1 Ý tưởng của chúng tôi về bản chất giống hệt nhau, nhưng bạn thực hiện công việc tốt hơn để gọt nó xuống cốt lõi của nó. (Nhìn vào câu trả lời của bạn, bây giờ tôi nhận ra tôi có một chút mang đi với việc xây dựng ví dụ data.frame!) –
khi tôi đăng câu trả lời ban đầu của bạn là khá khác nhau, họ bây giờ hầu như giống hệt với các tên – baptiste
Vâng, tôi thấy điều đó. một vài phút của nhau. cả hai. –