2014-12-06 45 views
0

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

,但我沒有得到任何運氣。

我希望我已經解釋了我以後的事情,並且會很感謝您提供的任何幫助。

非常感謝

+1

效果量是一個函數不是一個數據幀/矩陣。你引用它的方式是行不通的。我建議閱讀R數據結構和功能。 http://cran.r-project.org/doc/manuals/r-release/R-intro.html – Avinash 2014-12-06 12:35:34

+0

總是很高興有問題儘可能多的事情無關的問題(我的功能不工作)被剝離,實際上發佈的內容在發佈時發揮作用(在這種情況下中斷)。因此,請儘量展示真實的最小代碼,而不是臃腫的僞代碼。換句話說,我必須**閱讀很多**和**仍然必須猜測**並對這個問題以及它可能發生的情況作出假設。 – petermeissner 2014-12-06 12:58:24

回答

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指出的那樣,您必須應用一個函數來索引它返回的對象 - 您不能爲函數本身建立索引。

2

給出一個簡短的答案:你不能子集函數。

假設你有...

dummy <- function(){ 
    # doing some stuff 
    results <- data.frame(1:3, letters[1:3]) 
    return(results) 
} 

你不能做的是以下...

dummy[1,] 

..但是一會工夫?

dummy()[1,] 

dummy[1,]嘗試子集中的對象虛設。由於啞元是一個函數,而不是矩陣或data.frame,它不支持這種方法。

另一方面dummy()[1,]的作品,因爲它試圖將dummy()產生的結果進行子集化,而不是函數本身。


因此,我想是不是這條線......

weight=1/EffectSize[,4] 

一個人應該爲你工作:

weight=1/EffectSize()[,4] 
+0

明智的答案,一個不那麼多的問題。 +1! – PavoDive 2014-12-06 13:55:56

+0

感謝您的幫助。對不起,我努力表達我真正想做的事情,但是這幫助我感謝。 – denby47 2014-12-06 15:10:49

相關問題