Giả sử tôi có một chức năng tạo khung dữ liệu. Tôi muốn chạy hàm đó với các giá trị đầu vào khác nhau và sau đó rbind kết quả lại với nhau thành một khung dữ liệu lớn, như sau:Buộc phải trả lại một danh sách?
CreateDataFrame <- function(type="A", n=10, n.true=8) {
data.frame(success=c(rep(TRUE, n.true), rep(FALSE, n - n.true)), type=type)
}
df <- do.call(rbind, lapply(toupper(letters[1:5]), CreateDataFrame))
Hàm CreateDataFrame của tôi có ba đối số. Trong ví dụ trên, các đối số thứ hai và thứ ba được giữ không đổi. Tôi muốn làm tương tự như trên, nhưng có đối số thứ hai và thứ ba thay đổi trên mỗi cuộc gọi. Tôi nghĩ rằng tôi phải sử dụng mapply, như thế này:
mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
Tôi đang gặp rắc rối vì mapply không trả về một danh sách, mà ngăn cản tôi chạy do.call(rbind, mapply(...))
. Làm thế nào tôi có thể kết thúc với một khung dữ liệu duy nhất, như tôi đã làm trong ví dụ ở đầu trang?
Có vẻ như đang trả về một ma trận danh sách. Tôi đã hy vọng nó sẽ trả về một danh sách các khung dữ liệu. Tôi nên làm gì khác?
Cảm ơn bạn! Nhìn lại, tôi nên đọc hướng dẫn kỹ hơn. – Adrian
Không sao cả. Phải mất một thời gian trước khi tôi biết rằng bất cứ khi nào tôi thấy mình nghĩ "sẽ không tốt đẹp nếu hàm X đã làm Y", có một cơ hội tốt mà người tạo ra chức năng đã đánh tôi với suy nghĩ đó! –
nó rất câm mà đơn giản hóa cần phải ở thủ đô. Hình thức của nó không phù hợp với chức năng nhóm sapply – adam