从C 运行代码后解锁绑定(在R中)的问题
Problems with unlocking binding (in R) after running code from c++
因此,我将一些代码从R中放入R中,以使我的模型运行速度更快。C 代码返回2个项目的列表:一个称为"跟踪"的向量和一个称为"权重"的矩阵。C 代码运行后,我想将"权重"answers"跟踪"重新分配为从C 代码计算的值。不幸的是,当我尝试执行此操作时,我会遇到错误:"错误:无法更改锁定绑定的'权重'的值"。因此,我搜索了一个解开功能,并发现了解锁点。我将其固定在我的R代码中,但是我仍然遇到与以前相同的错误!我是否将解锁功能放在错误的位置?我是否正确使用它?项目"权重"answers"跟踪"确实存在于全球环境中,所以它们为什么不解锁?
我分配了C 代码返回到变量"结果"的列表,然后我使用了Unlockbinding功能,然后将"权重"answers" Trace"重新分配为C 代码中计算的内容。这是代码:
batch <- function(n.training){
for(i in 1:n.training){
g <- input.correlation()
for(o in 1:nrow(g)){
result <- traceUpdate(g[o,], trace, weights, trace.param, learning.rate)
unlockBinding("weights", .GlobalEnv)
unlockBinding("trace", .GlobalEnv)
weights <<- result$weights
trace <<- result$trace
}
}
}
这是我的C 代码的一部分,它返回了2个项目的列表,一个是矩阵"权重",另一个是向量"跟踪":
List traceUpdate(NumericVector input, NumericVector trace, NumericMatrix weights, double traceParam, double learningRate){
NumericVector output = forwardPass(input, trace.size(), weights);
for(int i = 0; i<trace.size(); i++){
trace[i] = (1 - traceParam) * trace[i] + traceParam * output[i];
for(int j=0; j<input.size(); j++){
double w = weights(j,i);
if(w >= 0){
weights(j,i) = w + learningRate * trace[i] * input[j] - learningRate * trace[i] * w;
}
}
}
//return weights
return List::create(Rcpp::Named("weights") = weights,
Rcpp::Named("trace") = trace);
}
如果我只是重新分配这样的权重: 权重&lt; - 矩阵(0,nrow = 100,ncol = 20)他们全部更改为零,我没有错误。
另外,在网上寻找解决方案时,我遇到了一种在R中解锁环境的方法,但我很确定这不是问题,因为环境没有锁定。
我是这个网站的新手,对编程的新手,因此,如果我的问题是愚蠢或格式不正确的。
,我深表歉意。谢谢。
刚从我的教授那里收到了解决方案:
"而不是将权重和跟踪视为从批处理功能内部修改的全局变量,我们可以将它们传递到功能中并将其返回:"
batch <- function(weights, trace, n.training){
for(i in 1:n.training){
g <- input.correlation()
for(o in 1:nrow(g)){
result <- traceUpdate(g[o,], trace, weights, trace.param, learning.rate)
weights <- result$weights
trace <- result$trace
}
}
return(list(weights=weights, trace=trace))
}
result <- batch(weights, trace, 50)
weights <- result$weights
trace <- result$trace
相关文章:
- C++ 有关unordered_map的结构化绑定问题
- 将非静态函数绑定到回调时出现问题
- 具有C++绑定和开放 MP 阻塞问题的零 MQ.为什么
- QML&C++应用程序中的绑定循环问题
- 仅在使用间接寻址时调用虚函数 — 经典的早期绑定问题?
- 在C++(和MoveIt API)上传递成员函数的std::绑定作为参数时出现问题
- 从C 运行代码后解锁绑定(在R中)的问题
- 如何解决这个问题?非常量引用必须绑定到左值
- Python C++绑定类型upcast问题
- 取消绑定此指针有什么问题
- C++:使用模板和提升::绑定的链接器问题
- Clang:将绑定或mem_fn与字符串::c_str和转换一起使用时出现问题
- 提升::绑定和io_service的问题
- 将 std 绑定传递到函数映射的问题
- 与节点FFI创建SDL2操纵杆绑定的问题
- 关于Boost::multi_index_container,错误c3849,绑定到int有什么问题
- 提升 unix 上的 UDP 套接字问题 - 绑定:地址已在使用中
- boost元组导致boost绑定/boost函数出现问题
- 绑定的VAO问题
- Windows套接字api绑定函数编译问题