使用来自其他功能的数据

时间:2014-12-06 11:32:41

标签: r

我在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]
...
}

但我没有运气。

我希望我已经解释了我所追求的那种东西,并且感谢您提供的任何帮助。

非常感谢

2 个答案:

答案 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]