Tôi có một danh sách các hàmÁp dụng danh sách hàm n cho mỗi hàng của một khung dữ liệu?
funs <- list(fn1 = function(x) x^2,
fn2 = function(x) x^3,
fn3 = function(x) sin(x),
fn4 = function(x) x+1)
#in reality these are all f = splinefun()
Và tôi có một dataframe:
mydata <- data.frame(x1 = c(1, 2, 3, 2),
x2 = c(3, 2, 1, 0),
x3 = c(1, 2, 2, 3),
x4 = c(1, 2, 1, 2))
#actually a 500x15 dataframe of 500 samples from 15 parameters
Đối với mỗi i hàng, tôi muốn đánh giá chức năng j trên mỗi j cột và tổng kết quả:
unlist(funs)
attach(mydata)
a <- rep(NA,4)
for (i in 1:4) {
a[i] <- sum(fn1(x1[i]), fn2(x2[i]), fn3(x3[i]), fn4(x4[i]))
}
Làm cách nào để tôi thực hiện điều này một cách hiệu quả? Đây có phải là dịp thích hợp để thực hiện các chức năng plyr
không? Nếu vậy, làm thế nào?
câu hỏi thưởng: tại sao là a[4]
NA
?
Đây có phải là thời điểm thích hợp để sử dụng các chức năng từ plyr
, nếu có, làm cách nào tôi có thể làm như vậy?
@abe cho đoạn mã thứ ba, bạn cần phải là 'không công khai (vui)' và 'đính kèm (mydata)' hoặc sử dụng 'funs $ fn1' và' mydata $ x1' –
@David cảm ơn vì đã sửa, tôi đã thay đổi mã để phản ánh điều này - nhưng điều này chính xác là sự lộn xộn mà tôi muốn tránh. – Abe
Vâng, đối với điểm thưởng, câu trả lời là không có phần tử thứ 4 trong mydata $ x4 hoặc bất kỳ cột nào trong khung dữ liệu đó. Một bình luận thêm .. chỉ cần gõ unlist (funs) không có gì trừ khi bạn gán kết quả cho một cái gì đó. Chào mừng bạn đến với chương trình chức năng. –