2016-05-11 4 views
0

Для примера dataframe:Извлечение значений из вывода функции: В R

df <- structure(list(region = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L), .Label = c("a", "b", "c", "d"), class = "factor"), 
    result = c(0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L), weight = c(0.126, 
    0.5, 0.8, 1.5, 5.3, 2.2, 3.2, 1.1, 0.1, 1.3, 2.5)), .Names = c("region", 
"result", "weight"), row.names = c(NA, 11L), class = "data.frame") 

Я расчет relative risk с помощью функции:

#Relative risk function 
calcRelativeRisk <- function(mymatrix,alpha=0.05,referencerow=2) 
{ 
    numrow <- nrow(mymatrix) 
    myrownames <- rownames(mymatrix) 
    for (i in 1:numrow) 
    { 
    rowname <- myrownames[i] 
    DiseaseUnexposed <- mymatrix[referencerow,1] 
    ControlUnexposed <- mymatrix[referencerow,2] 
    if (i != referencerow) 
    { 
     DiseaseExposed <- mymatrix[i,1] 
     ControlExposed <- mymatrix[i,2] 
     totExposed <- DiseaseExposed + ControlExposed 
     totUnexposed <- DiseaseUnexposed + ControlUnexposed 
     probDiseaseGivenExposed <- DiseaseExposed/totExposed 
     probDiseaseGivenUnexposed <- DiseaseUnexposed/totUnexposed 

     # calculate the relative risk 
     relativeRisk <- probDiseaseGivenExposed/probDiseaseGivenUnexposed 
     print(paste("category =", rowname, ", relative risk = ",relativeRisk)) 

     # calculate a confidence interval 
     confidenceLevel <- (1 - alpha)*100 
     sigma <- sqrt((1/DiseaseExposed) - (1/totExposed) + 
         (1/DiseaseUnexposed) - (1/totUnexposed)) 
     # sigma is the standard error of estimate of log of relative risk 
     z <- qnorm(1-(alpha/2)) 
     lowervalue <- relativeRisk * exp(-z * sigma) 
     uppervalue <- relativeRisk * exp(z * sigma) 
     print(paste("category =", rowname, ", ", confidenceLevel, 
        "% confidence interval = [",lowervalue,",",uppervalue,"]")) 
    } 
    } 
} 

первых о создании xtab:

df$region <- factor(df$region) 
result <- xtabs(weight ~ region + result, data=df) 
result 

И затем используя функцию для расчета относительного риска:

calcRelativeRisk(result,alpha=0.05) 
[1] "category = a , relative risk = 1.26904794624327" 
[1] "category = a , 95 % confidence interval = [ 0.751148304223936 , 2.14402759189898 ]" 

Я хочу обозначить относительный риск («RR») и доверительные интервалы «RR_upper» и «RR_lower». Это связано с тем, что я создаю большую таблицу с этим кодом, запущенным на нескольких фреймах данных. Как извлечь эти значения из вывода R? (а затем округлить их и т. д.). Я предполагаю, что могу изменить параметры печати функции, но поскольку я не создал эту функцию, я задавался вопросом, есть ли другой способ?

ответ

2

Лучше всего было бы изменить оператор печати на то, что выводит данные. Если вы обернете calcRelativeRisk(result,alpha=0.05) либо в str, либо в typeof, вы получите NULL. Оператор печати не сохраняет значения и возвращает объект NULL.

После заявления печати, в последней строке функции, добавьте именованный вектор:

c("relative_risk"=relativeRisk, "lowervalue"=lowervalue, "uppervalue"=uppervalue) 

Это возвращает числовой вектор длиной 3, который затем можно использовать для создания таблиц.

Так дно вашей функции будет выглядеть следующим образом:

Чтобы получить эти значения просто используйте следующее:

myValues <- calcRelativeRisk(result,alpha=0.05) 
+0

Perfect - благодаря @Imo –

Смежные вопросы