Есть ли функция R для добавления контента в уже существующий список? - PullRequest
1 голос
/ 15 апреля 2019

Я новичок в R. Я пытаюсь создать список из 2 функций.Первая - это функция извлечения, она берет данные и создает с ними список.Второй - процессный, он вычисляет некоторые значения, и мне нужно, чтобы они были вместе в первом списке.Как я могу это сделать ?

myfun <- function(data,number_meta) { #extraction function
  OR  <- data$`Odds Ratio`[data$`Identification number`==number_meta]
  SE  <- ((log(data$`Upper limit`) - (log(data$`Lower limit`))) / 3.92)[data$`Identification number`==number_meta]
  res <- metagen(TE=log(OR),seTE=SE,sm="OR")

  tableau = cbind(OR, SE)
  LIST = list(tableau, res)

  return(LIST)
}

myfun(data,number_meta) 
number_meta = c(1:33)
i = c(1:33)
number_meta = i
LIST = list()

for (i in 1:33) {
  LIST[[i]] = myfun(data, number_meta[i])
}

myfun2 <- function(LIST) { # processing function
  dup_OR <- duplicated(LIST[[i]][[1]][,1])
  dup_SE <- duplicated(LIST[[i]][[1]][,2])

  options(scipen = 999)

  Egger  <- metabias(LIST[[i]][[2]], method.bias = "linreg", k.min = 1)
  Begg   <- metabias(LIST[[i]][[2]], method.bias = "rank",   k.min = 1)
  Result <- c(dup_OR,dup_SE,Egger,Begg)

  return(Result)
}

myfun2(LIST)

for (i in 1:33) {
  LIST[[i]] = c(LIST, list(myfun2(LIST))) ## This one is not working !
}

Я хотел бы получить окончательный список из 33 элементов, в котором я мог бы найти различные значения res, dup_OR, dup_SE, Egger, Begg.Эти значения варьируются от значений рез.Спасибо за вашу помощь

Вот мой оригинальный сценарий:

setwd("U:/Stage M2 Phame")

library(readxl)

library(meta)

data <- read_excel("Tableau_OR.xlsx")

OR <- ((data$`Odds Ratio`[data$`Identification number`==number_meta[i]]))

SE <- (((log(data$`Upper limit`) - (log(data$`Lower limit`)))/3.92)[data$`Identification 
number`==number_meta[i]])

dup_OR <- duplicated(OR)

dup_SE <- duplicated(SE)

options(scipen = 999)

res <- metagen(TE=log(OR),seTE=SE,sm="OR")

Egger <- metabias(res, method.bias = "linreg", k.min = 5)

Begg <- metabias(res, method.bias = "rank", k.min = 5)

Trim <- trimfill(res) 

LIST=list(dup_OR, dup_SE, Egger, Begg, Trim)

Извините за весь мой блок текста.

1 Ответ

0 голосов
/ 15 апреля 2019

Как насчет этого (я позволил себе создать минимальный рабочий пример):

## define a function that appends something to an existing list
appendtolist = function(oldlist, add_element){

    if(class(add_element) == "list"){
        oldlist = c(oldlist, add_element)
    }
    else if(class(add_element) != "list"){
        oldlist[[length(oldlist) + 1]] = add_element
    }
    return(oldlist)
}

## define a test list
firstlist = list("a", c(1:10), "test")

## add content to the first list
newlist = appendtolist(firstlist, c(1:1000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...