我想做以下事情:
#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 :(得分: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
}