小编Tom*_*mmy的帖子

R .call()接口和EXTPTRSXP:了解外部分配的对象的PROTECT/UNPROTECT

在下面的代码中,类型为foo的对象是通过调用foo_new()创建的,而对象的外部指针则返回给R.后续计算通过传递ptr_foo来执行.最终通过显式调用foo_free(foo*X)释放该对象.所有计算都由libfoo执行.

创建ptr_foo的事实是否意味着foo对象中的所有其他动态分配的字段都会自动受到保护?或者,垃圾收集器可能会扫除诸如"bar"之类的字段吗?

SEXP foo_new (SEXP n) {
    SEXP ptr_foo;
    foo *X = (foo*) foo_new( 1, sizeof(foo) );
    //foo is protected from garbage collection
    assert( X );
    X->bar = (int*) foo_add_bar(INTEGER_VALUE(n));
    //Is bar protected from garbage collection?
    assert(X->bar);
    PROTECT( ptr_foo = R_MakeExternalPtr(X, install("extptr_foo"), R_NilValue) );
    R_RegisterCFinalizerEx( ptr_foo, ptr_foo_finalize, 1 );
    UNPROTECT( 1 );
    return (ptr_foo);
} 
Run Code Online (Sandbox Code Playgroud)

谢谢,

RT

c memory-management r externalinterface

6
推荐指数
1
解决办法
1201
查看次数

使用ggplot2绘制多边形shapefile和geom_points

我一直在努力解决这个阴谋,并希望得到任何帮助.我试图在我的geom_points上绘制一个多边形.这是我到目前为止所做的:

> names(OT1)# my dataset
[1] "EID"       "latitude"  "longitude" "month"     "year"      "CPUE"      "TSUM" 
> dim(OT1)
[1] 2707    7
> head(OT1)
                EID latitude longitude month year CPUE TSUM
1   167-1-1996-1135 67.70000 -61.81667     9 1996    0    0
2  167-10-1996-1135 67.71667 -59.18333     9 1996    0    0
3 167-100-1996-1135 67.86667 -59.43333    10 1996    0    0
4 167-101-1996-1135 67.95000 -59.58333    10 1996    0    0
5 167-102-1996-1135 68.10000 -59.76667    10 1996    0    0
6 167-103-1996-1135 67.81667 -59.38333    10 1996    0    0

OTz<-OT1[with(OT1,OT1$TSUM=="0"),]#selecting only my zeros
OTc<-OT1[!with(OT1,OT1$TSUM=="0"),] …
Run Code Online (Sandbox Code Playgroud)

r geospatial shapefile ggplot2

6
推荐指数
1
解决办法
5933
查看次数

将结果从嵌套循环写入R中的另一个向量

我对R很陌生,我正在苦苦挣扎.我有以下代码:

repeat {
    if (t > 1000) 
        break
    else {
        y1 <- rpois(50, 15)
        y2 <- rpois(50, 15)
        y <- c(y1, y2)
        p_0y <- matrix(nrow = max(y) - min(y), ncol = 1)
        i = min(y)
        while (i <= max(y)) {
            p_0y[i - min(y), ] = (length(which(y1 == i))/50)
            i <- i + 1
        }
        p_y <- matrix(nrow = max(y) - min(y), ncol = 1)
        j = min(y)
        while (j <= max(y)) {
            p_y[j - min(y), ] = (length(which(y == j))/100) …
Run Code Online (Sandbox Code Playgroud)

r vector nested-loops

0
推荐指数
1
解决办法
670
查看次数