Khi cố gắng tạo danh sách các hàm tương tự bằng cách sử dụng lapply
, tôi thấy rằng tất cả các hàm trong danh sách đều giống nhau và bằng với yếu tố cuối cùng.Trả về các chức năng ẩn danh từ một cách lapply - điều gì đang xảy ra?
xem xét như sau:
pow <- function(x,y) x^y
pl <- lapply(1:3,function(y) function(x) pow(x,y))
pl
[[1]]
function (x)
pow(x, y)
<environment: 0x09ccd5f8>
[[2]]
function (x)
pow(x, y)
<environment: 0x09ccd6bc>
[[3]]
function (x)
pow(x, y)
<environment: 0x09ccd780>
Khi bạn cố gắng để đánh giá các chức năng này bạn sẽ có được kết quả giống hệt nhau:
pl[[1]](2)
[1] 8
pl[[2]](2)
[1] 8
pl[[3]](2)
[1] 8
gì đang xảy ra ở đây, và làm thế nào tôi có thể nhận được kết quả tôi mong muốn (các chức năng chính xác trong danh sách)?
Tôi không chắc chắn, những gì mục tiêu của bạn là. Có thể 'pl <- function (x, y) lapply (y, hàm (y) pow (x, y)); pl (2,1: 3) '? – Roland
Những ghi chú của Ross Ihaka (RCore) có thể hữu ích (đặc biệt là phần về Đánh giá Lười biếng) www.stat.auckland.ac.nz/~ihaka/downloads/Waikato-WRUG.pdf –
Lưu ý rằng điều này không còn đúng với R 3.2.0, xem câu trả lời của tôi dưới đây. – jhin