2013-06-25 11 views
9

Chciałbym ponownie użyć kodu R z pakietu stats, który symuluje tabele kontyngencji, aby obliczyć symulowany p.value dla testu chi-kwadrat.Jak wywołać wewnętrzną funkcję R C z własnego kodu

Patrząc na kod źródłowy chisq.test funkcji, można znaleźć w następujących miejscach:

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) 
    } 

Ciekawa linia jest tu .Call wezwanie:

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

Co chciałbym zrobić, jeśli jest to możliwe, należy użyć tej funkcji C_chisq_sim w moim własnym kodzie, ale nie mogę tego zrobić. Jeśli spróbuję z:

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

Otrzymuję błąd C_chisq_sim object not found. A jeśli spróbuję z:

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

Pojawia się błąd informujący, że punkt wejścia nie znajduje się w tabeli ładowania.

Chciałbym rozwiązanie, które byłoby wieloplatformowe, jeśli to możliwe.

Odpowiedz

11

To powinno załatwić sprawę ja zgadnę:

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

Ah, tak, to działa! Wielkie dzięki ! – juba

+1

Jak to jest możliwe bez uciekania się do ':::' (a tym samym unikania gniewu CRAN)? – Henrik

0

Inną opcją masz jest użycie funkcji R r2dtable (patrz documentation).

Zarówno C_chisq_sim, jak i r2dtable używają tego samego algorytmu AS159. Jeśli chcesz uzyskać inne opcje kodu źródłowego, zobacz tę reference.

Powiązane problemy