2013-06-25 26 views
9

Tôi muốn sử dụng lại mã R từ gói stats mô phỏng các bảng dự phòng để tính toán mô phỏng chi tiết p.value cho thử nghiệm chi bình phương.Cách gọi hàm R C nội bộ từ mã của riêng bạn

Khi nhìn vào mã nguồn chisq.test chức năng, bạn có thể thấy như sau:

if (simulate.p.value && all(sr > 0) && all(sc > 0)) { 
     setMETH() 
     tmp <- .Call(C_chisq_sim, sr, sc, B, E) 
     STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE)) 
     PARAMETER <- NA 
     PVAL <- (1 + sum(tmp >= almost.1 * STATISTIC))/(B + 
      1) 
    } 

Dòng thú vị ở đây là .Call gọi:

tmp <- .Call(C_chisq_sim, sr, sc, B, E) 

Những gì tôi muốn làm, nếu có thể, hãy sử dụng hàm C_chisq_sim này trong mã của riêng tôi, nhưng tôi không thể quản lý nó. Nếu tôi thử với:

tmp <- .Call(C_chisq_sim, sr, sc, B, E, PACKAGE="stats") 

Tôi gặp lỗi C_chisq_sim object not found. Và nếu tôi thử với:

tmp <- .Call("C_chisq_sim", sr,sc,B,E, PACKAGE="stats") 

Tôi gặp lỗi khi nói rằng điểm vào không có trong bảng tải.

Tôi muốn một giải pháp có thể là nền tảng chéo, nếu có thể.

Trả lời

11

này nên làm các trick Tôi đoán:

tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E, PACKAGE="stats") 
+0

Ah, vâng, nó hoạt động! Cảm ơn rất nhiều ! – juba

+1

Làm thế nào điều này có thể mà không cần đến ':::' (và do đó tránh được cơn thịnh nộ của CRAN)? – Henrik

0

Một tùy chọn khác mà bạn có là để sử dụng chức năng R r2dtable (xem documentation).

Cả hai C_chisq_simr2dtable sử dụng cùng một thuật toán AS159. Nếu bạn muốn các tùy chọn mã nguồn khác, hãy xem số reference này.