在R库中,我使用dot程序(来自GraphViz)来生成一些图形(通常是png格式).dot是一个通常的可执行文件,我通过systemR命令执行它.到目前为止,一切运行正常,因为GraphViz安装程序正在添加dot到PATH环境变量.我只是要求用户安装GraphViz.
从版本2.31(参见http://www.graphviz.org/Download_windows.php)开始,GraphViz不再更新PATH环境变量,因此调用dot失败(这不是一个惊喜).因为库的用户通常不是计算机专家,所以我不能要求他们更新PATH以包含GraphViz.
该库分布在CRAN上.出于这个原因,我无法分发可执行文件(或任何已编译的代码).我主要需要Windows的解决方案,因为这似乎不会影响Linux或Mac.
关于如何进行生成图像文件的任何想法?还是找dot?
在R中,我使用内部C++结构来存储数据(使用R_ExternalPtr).然后可以使用各种功能处理数据.这是一个简单的例子(真正的数据结构要复杂得多):
#include <Rinternals.h>
class MyObject{
public:
int type;
MyObject(int t):type(t){}
};
void finalizeMyObject(SEXP ptr){
MyObject * mo= static_cast<MyObject *>(R_ExternalPtrAddr(ptr));
delete mo;
}
extern "C" {
SEXP CreateObject(SEXP type) {
SEXP ans;
int nb = length(type);
PROTECT(ans=allocVector(VECSXP, nb));
int * typeP = INTEGER(type);
SEXP cl;
PROTECT(cl = allocVector(STRSXP, 1));
SET_STRING_ELT(cl, 0, mkChar("myObject"));
for(int i=0; i<nb; i++){
MyObject * mo = new MyObject(typeP[i]);
SEXP tmpObj = R_MakeExternalPtr(mo, R_NilValue, R_NilValue);
R_RegisterCFinalizerEx(tmpObj, (R_CFinalizer_t) finalizeMyObject, TRUE);
classgets(tmpObj, cl);
SET_VECTOR_ELT(ans, i, tmpObj);//Put in vector
}
UNPROTECT(2); …Run Code Online (Sandbox Code Playgroud) 我需要从函数内部更新回归模型.理想情况下,该功能应该与任何类型的模型(工作lm,glm,multinom,clm).更准确地说,我需要添加一个或几个在函数内定义的协变量.这是一个例子.
MyUpdate <- function(model){
randData <- data.frame(var1=rnorm(length(model$residuals)))
model2 <- update(model, ".~.+randData$var1")
return(model2)
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例用法
data(iris)
model1 <- lm(Sepal.Length~Species, data=iris)
model2 <- MyUpdate(model1)
Run Code Online (Sandbox Code Playgroud)
eval(expr,envir,enclos)出错:找不到对象'randData'
这是glm的另一个例子
model1 <- glm(Sepal.Length>5~Species, data=iris, family=binomial)
model2 <- MyUpdate(model1)
Run Code Online (Sandbox Code Playgroud)
任何的想法?
这个问题与Rcmd checkR-Devel(3.1.0)有关。
我正在维护一个名为A的程序包,该程序“依赖”另一个程序包,让我将第二个程序包称为B。由于以下原因,我使用“ Depends”代替了“ import”:
程序包A使用程序包B的“未导出”功能,Rcmd check并对以下内容进行投诉:通过':::'调用导入的未导出对象(作为注释,但我希望将其全部删除)。我的问题是:我应该如何正确处理此笔记?我应该如何正确利用另一个软件包中的“未导出”功能?
我知道我们不应该使用“未导出”功能,但是我参与了这两个软件包的开发。