2015-06-08 30 views
0

功能我要做到以下幾點:環路和R中

#choosing one column called "z" from select 
select<-read.table(file='dane.txt', header=TRUE) 
n=select$z 

#defining f function 
f<-function(redshift) { 
    0.2*(sqrt(0.3*((1+redshift)^3)+0.7*((1+redshift)^2)+1))^(-1) 
} 

# for all values from column "z" I want to calculate the integral from 0 up to value from column "z" 
for(i in n){ 
    int[i]<-integrate(f(i),0,i) 
} 

對於來自列所有值「Z」我想從0計算積分達到從列「Z」值,我想從文件中保存每個行的結果,名稱爲int。 爲什麼它沒有工作?現在它給了我錯誤:「match.fun(f)中的錯誤:'f(i)'不是函數,字符或符號」。請幫忙。

+0

'f'是一個函數。你認爲'f [i]'在做什麼?你想調用這個函數嗎?這可以通過'f(i)'完成。但看起來你只是想傳遞整個函數來進行整合:'integrate(f,0,i)'。另外,int是從哪裏來的?請嘗試提供[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)並清楚地指出所需的輸出。 – MrFlick

+0

是的,我想調用該函數。在第一次嘗試我有int [i] < - integration(f(i),0,i),但它也沒有工作。我在這裏把我最後一次嘗試與f [i]放在一起。我想把結果保存在「int」的名字下。我想計算積分(f,0,i),並且對於我的文件中列「z」的所有「i」,我想保存結果。例如,對於n的第一個值(讓該值爲0.1):我想要像這樣計算積分:integrate(f(0.1),0,0.1)。 –

回答

0

由於沒有數據。例如我承擔了一些針對你的函數定義:

n = as.vector(runif(n=100, min=-3, max=10)) 
num.obs = length(n) 

定義功能爲你做:

f<-function(redshift) { 
    0.2*(sqrt(0.3*((1+redshift)^3)+0.7*((1+redshift)^2)+1))^(-1) 
} 

要值賦給int方式你必須首先對它進行初始化,然後對索引進行迭代,而不是n的值。 integrate給你一個清單,但我想你對價值感興趣。

int=matrix(NA, nrow=num.obs, ncol=1) 
for(i in 1:num.obs){ 
    int[i]=integrate(f,0,n[i])$value 
}