我在R" EffectSize"中创建了一个函数。当我运行它时,它会给我一个数据表。
即
EffectSize=function(data,conf.level,statistic){
...
}
并正在运行
EffectSize(epidural, 0.95, "OR")
我明白了:
Author OR ln(OR) Var ln(OR) 95% CI
1 A 0.894 -0.112 0.309967 (0.3001, 2.6611)
2 B 0.908 -0.097 0.064500 (0.5519, 1.4934)
3 C 0.824 -0.194 2.130252 (0.0471, 14.3893)
4 D 0.874 -0.135 0.015054 (0.6871, 1.1115)
5 E 0.764 -0.269 0.021964 (0.5712, 1.0212)
6 F 0.328 -1.116 0.415859 (0.0926, 1.1599)
现在我想创建另一个使用此表中值的函数。
我希望以相同的方式构建函数,使其成为:
InVar=function(data,conf.level,statistic){
...
}
就像问题的背景一样,我想要那个
weight=1/varodds
muhat=sum(weight*logodds)/sum(weight)
varmuhat=1/sum(weight)
为了达到这个目的,我尝试过像
这样的事情InVar=function(data,conf.level,statistic){
weight=1/EffectSize[,4]
...
}
但我没有运气。
我希望我已经解释了我所追求的那种东西,并且感谢您提供的任何帮助。
非常感谢
答案 0 :(得分:2)
我无法确切知道你的EffectSize
函数是如何工作的,但我认为它会将表生成为副作用而不返回对象。
将表分配给函数内的对象,然后让函数返回该对象:
EffectSize=function(data,conf.level,statistic){
...
table <- functionThatMakesTable
return(table)
}
然后在第二个函数中使用EffectSize
并从结果表对象中提取信息:
InVar=function(data,conf.level,statistic){
weight=1/EffectSize(data,conf.level,statistic)[,4]
...
return(weight)
}
更清洁的方法是计算EffectSize
内的重量,并将表格和重量作为列表或仅重量返回:
EffectSize=function(data,conf.level,statistic){
...
table <- functionThatMakesTable
print(table) # see the table in the output
weight <- 1/table[,4]
return(list(table, weight)) # or return(weight) if you just want to see the table and not use it later
}
关于你的原始代码,正如@Avinash指出的那样,你必须应用一个函数来索引它返回的对象 - 你不能索引函数本身。
答案 1 :(得分:2)
简短回答:您不能使用子集功能。
假设你有......
dummy <- function(){
# doing some stuff
results <- data.frame(1:3, letters[1:3])
return(results)
}
你不能做的是以下......
dummy[1,]
..但那个会奏效......
dummy()[1,]
dummy[1,]
尝试对象 dummy 进行子集化。因为虚拟是一个函数,而不是矩阵或data.frame,它不支持这种方法。
另一方面,dummy()[1,]
有效,因为它尝试对dummy()
生成的结果进行子集化而不是函数本身。
因此,我认为不是这一行......
weight=1/EffectSize[,4]
一个应该适合您:
weight=1/EffectSize()[,4]