我已经创建了一个自定义函数来根据两个输入计算值。
# function
info.theta <- function(theta, delta) {
P = 1/(1+exp(-1*(theta-delta)))
Q = 1 -P
1*P*Q
}
我想使用该函数计算两个感兴趣序列的所有可能值组合的值。
# for each input of the function create sequences of values to explore
thetas <- seq(-4, 4, by = .5)
deltas <- seq(-4, 4, by = .5)
我想最终得到一个数据框,其中一列标有thetas,delta和information,其中theta和delta都是函数中使用的序列的值,而signal是函数的输出对于theta和delta的每个组合。
我对如何执行最后一点感到茫然,因为这个级别的编码对我来说是新的。我的预感可能是一个嵌套的循环。这显然是不正确的,但它是尽可能接近我的开始。我如何以我描述的方式使用该函数来生成所需的数据框?
#nested for loop
y <- NULL
for(i in sequence) {
for(j in deltas) {
tmp <- info.theta(i, j)
y <- rbind(y, tmp)
}
}
y
答案 0 :(得分:2)
您可以使用outer
获取值矩阵:
outer(thetas,deltas,info.theta)
答案 1 :(得分:1)
对原始功能略有改动:
info.theta <- function(theta, delta) {
P = 1/(1+exp(-1*(theta-delta)))
Q = 1 -P
data.frame(theta=theta,delta=delta, information=1*P*Q)
}
因为data.frames更酷。
现在:
td_grid<-expand.grid(thetas, deltas)
info.theta(td_grid[,1],td_grid[,2])
结果:
theta delta information
1 -4.0 -4.0 0.2500000000
2 -3.5 -4.0 0.2350037122
3 -3.0 -4.0 0.1966119332
4 -2.5 -4.0 0.1491464521
5 -2.0 -4.0 0.1049935854
6 -1.5 -4.0 0.0701037165
7 -1.0 -4.0 0.0451766597
8 -0.5 -4.0 0.0284530239
9 0.0 -4.0 0.0176627062
10 0.5 -4.0 0.0108662297
11 1.0 -4.0 0.0066480567