Puzzle cho cognoscenti R: Giả sử chúng ta có một dữ liệu khung:Làm thế nào để viết một chức năng R mà đánh giá một biểu thức trong một dữ liệu-frame
df <- data.frame(a = 1:5, b = 1:5)
Tôi biết chúng ta có thể làm những việc như
with(df, a)
để nhận vectơ kết quả.
Nhưng làm cách nào để viết hàm có biểu thức (chẳng hạn như a
hoặc a > 3
) và thực hiện điều tương tự bên trong. I E. Tôi muốn viết một hàm fn
lấy một khung dữ liệu và một biểu thức làm đối số và trả về kết quả của việc đánh giá biểu thức "bên trong" khung dữ liệu dưới dạng môi trường.
Đừng bận tâm rằng điều này nghe có vẻ khó hiểu (tôi chỉ có thể sử dụng with
như trên), nhưng đây chỉ là một phiên bản đơn giản của một hàm phức tạp hơn tôi đang viết. Tôi đã thử một số biến thể (sử dụng eval
, with
, envir
, substitute
, local
, v.v.) nhưng không có biến thể nào hoạt động. Ví dụ nếu tôi xác định fn
như vậy:
fn <- function(dat, expr) {
eval(expr, envir = dat)
}
tôi nhận được lỗi này:
> fn(df, a)
Error in eval(expr, envir = dat) : object 'a' not found
Rõ ràng tôi đang thiếu một cái gì đó tinh tế về môi trường và đánh giá. Có cách nào để xác định một chức năng như vậy?
Có phần trên [Wiki của Hadley về chủ đề này] (https: // github.com/hadley/devtools/wiki/Evaluation) – Marek
@Marek đó là một tài liệu tham khảo tuyệt vời để đọc, cảm ơn! –
Trang này có còn truy cập được không? –