Вернуть объект из функции и сохранить в глобальной среде. R - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь вернуть объект со значением 'alt_props' для всех признаков с использованием функции:

calc_palt <- function(x){

  s <- length(pvals[which(pvals[,x] < (5*10^-8))]) #how many significant p-values
  t <- sum(! is.na(pvals[, x])) #total amount of SNPs
  alt_props <- s/t  #calculation of alt_props

  b <- sum(! is.na(betas[,x])) #total amount of betas

  if((alt_props/b) < 30){
    alt_props <- 30     #ensure that alt_props is at least 30
    return(alt_props)
  } else {
       return(alt_props)
     }
}

alt_props должно быть не менее 30, поэтому, когда вычисленный alt_props ниже чем 30, это значение alt_props должно быть изменено на 30. При выполнении: (x (1: 7) столбцы, которые представляют различные черты

calc_props(1:7) 
[1] 30

Я знаю, что return () возвращает только одно значение, так что это имеет смысл. Однако мне нужно вернуть объект со значениями 7. Кто-нибудь может мне помочь с этим?

Мои данные выглядят так: (бета-версия похожа)

pvals
       pval_g   pval_p pval_p.x pval_p.y   pval_m pval_m.x pval_m.y
 [1,] 6.0e-02       NA       NA       NA       NA       NA       NA
 [2,] 9.5e-01       NA       NA       NA       NA       NA       NA
 [3,] 1.2e-01       NA       NA       NA       NA       NA       NA
 [4,] 4.5e-12       NA       NA       NA       NA       NA       NA
 [5,] 3.9e-01       NA       NA       NA       NA       NA       NA
 [6,] 2.8e-01       NA       NA       NA       NA       NA       NA
 [7,] 5.1e-03       NA       NA       NA       NA       NA       NA
 [8,] 4.6e-02       NA       NA       NA       NA       NA       NA
 [9,] 4.8e-01       NA       NA       NA       NA       NA       NA
[10,]      NA       NA       NA       NA 0.701233 0.082081 0.137990
[11,]      NA 0.018110  0.23190  0.35680       NA       NA       NA

1 Ответ

0 голосов
/ 04 мая 2020

Возможно, вот что задает вопрос:
Код исходного ответа был полностью изменен после этого комментария пользователем Roland .

calc_props <- function(x, p.vals, betas){
  s <- colSums(p.vals < 5e-8, na.rm = TRUE)
  t <- colSums(!is.na(p.vals))
  b <- colSums(!is.na(betas))
  alt_props <- s/t
  alt_props[alt_props/b < 30] <- 30
  alt_props
}

В тесте используется матрица pvals дважды, вторая из них вместо betas, отсутствующих в вопросе.

calc_props(1:7, pvals, pvals)
#  pval_g   pval_p pval_p.x pval_p.y   pval_m pval_m.x pval_m.y 
#      30       30       30       30       30       30       30 

Данные в формате dput

pvals <-
structure(c(0.06, 0.95, 0.12, 4.5e-12, 0.39, 0.28, 0.0051, 0.046, 
0.48, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.01811, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.2319, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 0.3568, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, 0.701233, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.082081, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.13799, NA), .Dim = c(11L, 
7L), .Dimnames = list(NULL, c("pval_g", "pval_p", "pval_p.x", 
"pval_p.y", "pval_m", "pval_m.x", "pval_m.y")))
...