Como sugestão para um código mais enxuto, o objetivo poderia ser atingido com a aplicação da função apply:
> dados <- read.table("data_test.txt", header=T, sep= "\t")
> dados$p_valor <- apply(dados[,2:4], 1, function(linha) prop.test(x=c(linha[1],linha[2]),n=c(linha[3],linha[3]), correct=F)$p.value)
> dados
AREA X1 X2 N p_valor
1 1 1982 9416 11398 0,000000e+00
2 2 6546 4084 10630 5,362948e-250
3 3 3418 667 40850 0,000000e+00
4 4 1503 4408 59110 0,000000e+00
5 5 966 339 30500 6,472911e-69
Ademais, se o OP tiver que resolver problemas dessa natureza com frequência, pode ser que valha a pena examinar alguns pacotes que têm funções para facilitar esse tipo de resumos, como, por exemplo, os pacotes descr e reporttools.
HTH
--
Cesar Rabak