tôi đã vòng lặp lồng nhau sau:lặp trên sản phẩm Cartesian của vectơ
for (x in xs) {
for (y in ys) {
# Do something with x and y
}
}
Mà tôi muốn flatten vì vậy tôi nghĩ đến việc xây dựng một sản phẩm Descartes của hai vectơ xs
và ys
và lặp lại qua kết quả . Trong Python, đây sẽ là tầm thường:
for xy in product(xs, ys):
# x, y = xy[0], xy[1]
Nhưng trong R, tương đương đơn giản nhất tôi đã tìm thấy trông khó khăn:
xys <- expand.grid(xs, ys)
for (i in 1 : nrow(xys)) {
xy <- as.vector(xys[i, ])
# x <- xy[1], y <- xy[2]
}
Chắc chắn phải có một cách tốt hơn, đúng không? (Để làm rõ, tôi không muốn lặp qua một chỉ số ... Tôi nghĩ rằng phải có cách để trực tiếp lặp qua các bộ dữ liệu trong sản phẩm.)
@Konrad Rudolph: Tôi đã bỏ lại câu trả lời của tôi. Không có gì sai với nó. Tôi không chắc đó có phải là giải pháp mà bạn tìm kiếm hay không. @flodel đúng về các vấn đề khi sử dụng 'apply' với các kiểu đầu vào hỗn hợp. Trong trường hợp này, bạn có thể sử dụng 'as.numeric' để chuyển đổi một chuỗi thành một giá trị số. Nhưng không có vấn đề gì miễn là bạn chỉ sử dụng các vectơ số. –