在下面的代码中,类型为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
我一直在努力解决这个阴谋,并希望得到任何帮助.我试图在我的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很陌生,我正在苦苦挣扎.我有以下代码:
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)