r - 是否有 R 函数可以将内容添加到现有列表中?
问题描述
我是 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 的不同值。这些值与 res 的值不同。谢谢你的帮助
这是我的原始脚本:
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)
对不起我的整个文本块。
解决方案
这个怎么样(我冒昧地生成了一个最小的工作示例):
## 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))
推荐阅读
- python - 为什么 str(repr(p)) 和 print(repr(p)) 不一样?
- python - 我正在研究人工神经网络。隐藏层在哪里?
- excel - VBA如何按值将对象添加到数组中
- bash - 如何在 java-key-store 中检查证书链的客户端证书?
- python - 如何在具有要求和设置的现有 python 包中使用 tox
- twig - 替换 N 次出现的字符串
- azure - Azure 集成 CICD 的最佳实践
- ruby-on-rails - 将帮助文件加载到 FactoryBot 文件中会导致“无法加载此类文件”
- javascript - 是否可以在一个堆栈中实现多个队列?
- c++ - 使用四元数使用 glm 更新基于欧拉的相机