Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 跨多个不同站点优化参数_R - Fatal编程技术网

R 跨多个不同站点优化参数

R 跨多个不同站点优化参数,r,R,我的数据看起来类似于以下内容 Site Unknown_Parameter X Y Z Predicted Actual A 2 3 4 2 5 6 A 2 4 3 2 7 5 B 3 6 8 9 12 9 B 3 4 6 2 10 10 Site Optimal_Va

我的数据看起来类似于以下内容

Site Unknown_Parameter X Y Z Predicted Actual
A           2          3 4 2     5       6
A           2          4 3 2     7       5
B           3          6 8 9     12      9
B           3          4 6 2     10      10
Site Optimal_Value RMSE
A    1.7           2.45
B    1.2           3.24
C    1.3           9.21
等等

我试图创建一个函数,通过确定未知参数的最佳值来最小化每个站点的RMSE。我可以使用以下伪代码一次为单个站点执行此操作

fn <- function(unknown_parameter) {
df$Predicted <- calculations with unknown_parameter and X Y Z
RMSE <- sqrt(mean((df$Predicted - df$Actual)^2))
RMSE
}
optimize(fn, c(1,10))
等等


我一直在尝试使用split命令,但这会将我的数据转换为一个列表,我不确定如何使用它。有任何想法吗?

< P> >代码>拆分< /代码>通过输入因子的值产生一个子集数据框的列表,通过考虑“代码>”,也可以通过一个或多个因子对数据帧进行子集,但也可以将子集传递到函数中。要将所有数据帧绑定在一起,请在返回的列表上运行
do.call(rbind,…)

# USER-DEFINED METHOD RECEIVING subsetted df AS INPUT AND RETURNING dataframe AS OUTPUT
subset_process <- function(subdf) {

   fn <- function(unknown_parameter) {
      subdf$Predicted <- calculations with unknown_parameter and X Y Z
      RMSE <- sqrt(mean((subdf$Predicted - subdf$Actual)^2))

      return(RMSE)
   }

   opt <- optimize(fn, c(1,10))

   tmp <- data.frame(Site = subdf$Site[[1]],
                     Optimal Value = opt,
                     RMSE = fn)
   return(tmp)
}

# SPLIT + RUN METHOD ON EACH SUBSET
df_list <- by(df, df$Site, FUN=subset_process)

# APPEND ALL DF ELEMENTS INTO MASTER DF
final_df <- do.call(rbind, df_list)
#用户定义的方法,接收子集df作为输入,返回数据帧作为输出

subset_process您的psuedocode不显示单站点筛选器,而是在整个数据帧上运行。因此,对于单站点,我在前面运行了这一行以证明概念:data.frame中的df Error(Site=subdf$Site[[1]],Optimal_Value=opt,:未找到对象“subdf”。当我为tmp运行分配时,出现此错误。我应该以subdf的形式传递什么?当我在data.frame(Site=df$Site[[1]]中运行df_列表行错误时,也会出现此错误,Optimal_Value=opt,:参数意味着不同的行数:1,0I设法修复了前面的两个错误,但我得到的是每个站点完全相同的值和RMSE。我相信by命令没有正确地对数据进行子集设置,而是在每个站点的整个数据集上运行该函数。我让它工作了。忘记了将df更改为subdf。非常感谢!正确。将函数中的所有数据帧实例更改为参数subdf,就像我在这里使用的伪代码一样。很高兴提供帮助。编码愉快!