Присвойте вычисленное значение объекту в функции R - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь вернуть объект со значением 'alt_props' для всех характеристик с использованием функции. (alt_props xb) должно быть не менее 30, поэтому, когда вычисленное (alt_props xb) меньше 30, это значение alt_props должно быть изменено на значение alt_props 30 / b. (1: 7) - это столбцы, которые представляют различные черты.

calc_props <- function(x, pvals, betas){
  s <- colSums(pvals < 5e-8, na.rm = TRUE) #significant SNPs
  t <- colSums(!is.na(pvals)) #all SNPs
  b <- colSums(!is.na(betas)) #Number of betas 
  alt_props <- s/t    #alt_prop calculation
  a[x] <- 30/b #value to assign if alt_props*b < 30
  alt_props[(alt_props*b) < 30] <- a[x] #check to ensure that "alt_prop*b" is atleast 30
  alt_props
}

alt_props <- calc_props(1:7, pvals, betas) #the columns are the traits (7)

Однако при запуске этого кода я получаю сообщение об ошибке Error in a[x] <- 30/b : object 'a' not found. Как я могу назначить правильный a?

Мои данные выглядят так:

dput(pvals[1:10])
c(0.14, 0.87, 3.7e-23, 1.2e-07, 0.84, 0.72, 0.34, 0.13, 0.019, 
8e-05)
> dput(betas[1:10])
c(-0.0021, 2e-04, -0.0141, -0.0082, -7e-04, 8e-04, 0.0021, -0.0034, 
-0.0039, 0.0179)

1 Ответ

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

Вторая попытка ответа. Юдирование с использованием colSums, s, t и b должно быть векторами одинаковой длины, а вы вычисляете пропорции и сохраняете их в векторе alt_props. Теперь вы хотите ввести значение 30/b, если условие (alt_props * b) < 30. Мы можем попытаться сделать это, используя вектор значений и условий. Смотрите новую функцию. Я не видел необходимости в x в исходной функции, поскольку казалось, что он каким-то образом используется только для подмножества a.

calc_props <- function(x, pvals, betas){
  s <- colSums(pvals < 5e-8, na.rm = TRUE)
  t <- colSums(!is.na(pvals)) #all SNPs
  b <- colSums(!is.na(betas)) #Number of betas 
  alt_props <- s/t    #alt_prop calculation

  # Create the subsetting values and condition
  condition_val <- 30/b
  condition <- (alt_props*b) < 30

  # Subset both the alt_props and condition values with the same vector
  alt_props[condition] <- condition_val[condition] 
  alt_props
}
...