【发布时间】:2021-03-20 14:52:15
【问题描述】:
编辑:现在解决了,下面的解决方案。
我得到了一个 R 函数,我需要为不同的输入运行多次,并提取输出(稍后将进入数据帧)。下面的可重现示例。
这两个问题是:
- 我不知道如何将数据从下面的函数输出到可以读取的东西,如矩阵、字符串、其他对象等。我读过关于将东西输出到列表的内容,但是(以及由于无法捕获对象中的输出)这似乎与第二个问题相冲突,即:
- 该函数包含一个循环,因此当我尝试输出数字时,我通常只从循环的第一次迭代中获得输出,当我需要所有输出时(大多数时候只有两个一组数字,但有时还有更多)。
有没有人能请教如何重做这个函数,以便它输出一个我可以从中读取值的对象?也许循环可以用 map/lapply 函数或类似函数替换,但我真的很难在编写这些代码时绞尽脑汁。
可重现的示例(注意,需要 cmprsk 和生存包):
numbercruncher<-function(y,ev)
{
est<-round(y$est*100,1)
low<-round((exp(log(y$est)-1.96*sqrt(y$var)/y$est))*100,1)
up<-round((exp(log(y$est)+1.96*sqrt(y$var)/y$est))*100,1)
d<-nrow(est)/2
for (i in 1:d){
rws<-i+d*(ev-1)
cat("group",i,fill=TRUE)
out<-t(rbind(est[rws,],low[rws,],up[rws,]))
colnames(out)<-c("value1","value2","value3")
print(out)
}
}
set.seed(1234)
v <-sample(0:2, 1500, replace = TRUE)
t <-sample(0:90, 1500, replace = TRUE)
g <- sample(0:4, 1500, replace = TRUE)
incidence.model <- cuminc(t, v, g, cencode = 0)
incidence.y<-timepoints(incidence.model,times=c(90))
numbercruncher(incidence.y,1)
输出:
value1 value2 value3
[1,] 48.3 41.7 56
group 2
value1 value2 value3
[1,] 46.9 40 55
group 3
value1 value2 value3
[1,] 50.1 42.1 59.6
group 4
value1 value2 value3
[1,] 49.7 41.2 60
group 5
value1 value2 value3
[1,] 43.6 37.3 50.9
在此示例中,理想情况下,我会得到一个包含所有 value1 的向量,另一个包含所有 value2 和一个包含所有 value3 的向量。
感谢您的宝贵时间和帮助!
使用'解决了
numbercruncher<-function(y,ev)
{
out.final <<- numeric()
est<-round(y$est*100,1)
low<-round((exp(log(y$est)-1.96*sqrt(y$var)/y$est))*100,1)
up<-round((exp(log(y$est)+1.96*sqrt(y$var)/y$est))*100,1)
d<-nrow(est)/2
for (i in 1:d){
rws<-i+d*(ev-1)
cat("group",i,fill=TRUE)
out<-t(rbind(est[rws,],low[rws,],up[rws,]))
colnames(out)<-c("value1","value2","value3")
print(out)
out.final <<- append(out.final, out)
}
}
set.seed(1234)
v <-sample(0:2, 1500, replace = TRUE)
t <-sample(0:90, 1500, replace = TRUE)
g <- sample(0:4, 1500, replace = TRUE)
incidence.model <- cuminc(t, v, g, cencode = 0)
incidence.y<-timepoints(incidence.model,times=c(90))
numbercruncher(incidence.y,1)
这给出了一个数字向量,可以使用以下方法将其转换为矩阵:
out.final.matrix <- matrix(out.final, ncol = 3, byrow = TRUE)
【问题讨论】:
-
请注意,您可以在下面回答您自己的问题。
标签: r function loops extract purrr