小编Rem*_*i.b的帖子

使用计数器是好的做法吗?

这里有两个替代代码(在Julia中编码),它们基本上是相同的.

counter = 0
for i = myArray
    counter = counter + 1
    Do1(i)
    Do2(counter)
end
Run Code Online (Sandbox Code Playgroud)

for counter = 1:length(myArray)
    i = myArray[counter]
    Do1(i)
    Do2(j)
end
Run Code Online (Sandbox Code Playgroud)

什么是好的做法?哪个代码更快?哪个代码消耗的内存较少?哪个代码不易出错?为什么?

algorithm performance counter for-loop julia

4
推荐指数
2
解决办法
262
查看次数

在同一窗口上绘制多个不同大小的帧

考虑以下示例:

par(mfrow=c(2,3))
frame()
image(matrix(1:100, nrow=100), main="my wide plot", axes=FALSE)
frame()
plot(rnorm(120), rnorm(120), main="plot 1")
plot(dpois(0:20, lambda=6), type="b", main="plot 2")
x = rnorm(100)
y = x+runif(100, 10, 12)
plot(x=x, y=y, , main="plot 3")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如何使我的第一个图形(image(...)标题为my wide plot)占据窗口顶部的3个框架?

graphics plot r graph

4
推荐指数
1
解决办法
836
查看次数

更快的替代`range(which(..))`

设R中的序列为TRUE和FALSE

v = c(F,F,F,F,F,F,T,F,T,T,F,T,T,T,T,T,F,T,F,T,T,F,F,F,T,F,F,F,F,F)
Run Code Online (Sandbox Code Playgroud)

我想获得第一个和最后一个TRUE的位置.实现这一目标的一种方法是

range(which(v)) # 7 25
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案相对较慢,因为它必须检查向量的每个元素以获得每个TRUE的位置然后遍历所有位置,if在每个位置评估两个语句(我认为)以获得最大值和最小值.从头开始搜索第一个TRUE,从头开始搜索第一个TRUE并返回那些位置将更具战略意义.

有更快的替代方案range(which(..))吗?

binary performance boolean r

4
推荐指数
2
解决办法
124
查看次数

R中的`Terminal` vs`ystem()`

我尝试在R中运行以下命令

system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))")
Run Code Online (Sandbox Code Playgroud)

但它失败了

Message=HelloWoRld
echo $(sed 's/R/r/' <(echo ${Message}))
Run Code Online (Sandbox Code Playgroud)

复制粘贴在终端时工作正常.这个问题似乎与此有关<(..).当我做任何一个which bash或者system("which bash"),我得到/bin/bash.

为什么通过system()或直接在终端窗口上的相同命令不会产生相同的输出?


仅供参考,我在Mac OS X 10.11.3.Bash是GNU bash, version 3.2.57(1)和R是R version 3.2.3.

macos bash r

4
推荐指数
1
解决办法
56
查看次数

ggplot2:添加用于facet_grid的变量的名称

require(ggplot2)
ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(vs+gear ~ cyl+am) 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想在此图上添加用于facet_grid的4个变量的名称。我想最好的方法是在角落添加变量名称,并用一个指向行或列的小箭头。我当时正在考虑使用annotation_customtextGrob为此目的,但未能在图形上打印任何内容。

plot r graph facet ggplot2

4
推荐指数
1
解决办法
785
查看次数

为方法提供一个空实例是一种好习惯吗?

C++新手在这里!有一个类Individual分配了很多记忆,所以我们想避免复制.设motherfather是两个Individual秒.我希望他们用这个方法重现reproduce另一个Individual叫做的方法baby.

直观地说,我将baby使用默认构造函数初始化,将其传递给参数reproduce并返回引用(尽管我认为没有必要返回引用).这是一个代码

class Individual
{
    public:
        void reproduce (const Individual& father, Individual& baby)
        {
          // Set all attributes of baby
        }
    private:
        // Plenty of variables
}

int main()
{
  // Do Stuff
    Individual mother(arg1,arg2,arg3);
    Individual father(arg1,arg2,arg3);
    // Do stuff
    Individual baby;
    mother.reproduce(father,baby);
}
Run Code Online (Sandbox Code Playgroud)

这被认为是好习惯吗?

另一种方法是baby直接在方法中初始化reproduce并返回一个引用,但我会预测它baby会在调用结束时被销毁reproduce.

class Individual
{
    public:
        Individual& reproduce (const Individual& …
Run Code Online (Sandbox Code Playgroud)

c++ methods performance class

4
推荐指数
1
解决办法
239
查看次数

调用对象类型'void(B ::*)(int)'不是函数或函数指针

我试图将传递方法作为函数参数包裹起来.这是一个简单的示例,它返回我不理解的编译错误

class B
{
private:
    int j;
public:
    void foo(int i){std::cout << i + this->j << std::endl;}
    void setj(int J){j=J;}
};

class A
{
private:
    B b;

public:
    void call(void (B::*fun)(int i), int i) { b.*fun(i); }
    void setBj(int j){b.setj(j);}
};


int main()
{
    A a;
    a.setBj(40);
    a.call(B::foo, 2);
}
Run Code Online (Sandbox Code Playgroud)

编译时

g++ -std=c++11 b.cpp -o b
Run Code Online (Sandbox Code Playgroud)

我明白了

b.cpp:22:50: error: called object type 'void (B::*)(int)' is not a function or
      function pointer
        void call(void (B::*fun)(int i), int i) { b.*fun(i); } …
Run Code Online (Sandbox Code Playgroud)

c++ function parameter-passing

4
推荐指数
1
解决办法
724
查看次数

ggplot2:带有分类轴和重叠点的躲避点

考虑下图

d1 = data.frame(x=LETTERS[1:2],y=c(1.9,2.3))
d2 = data.frame(x=LETTERS[1:2],y=c(1.9,3))

ggplot(d1, aes(x=x,y=y)) + geom_point(data=d1, color="red") + 
              geom_point(data=d2, color="blue")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

目标是躲避右侧的蓝色点和左侧的红点。一种方法是合并两个 data.frames

d1$category=1
d2$category=2
d = rbind(d1,d2)
d$category = as.factor(d$category)
ggplot(d, aes(x=x,y=y, color=category)) +
     geom_point(data=d, position=position_dodge(0.3)) + 
      scale_color_manual(values=c("red","blue"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

是否还有其他解决方案(不需要合并 data.frames 的解决方案)?

plot r graph ggplot2

4
推荐指数
1
解决办法
1290
查看次数

为什么在可能的情况下`realloc` 不会就地重新分配?

来自 c99:

realloc函数释放指向的旧对象,ptr并返回一个指向大小由 size 指定的新对象的指针。新对象的内容应与释放前的旧对象的内容相同,直到新旧大小中较小的一个。新对象中超出旧对象大小的任何字节都具有不确定的值。

[..]

realloc 函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值),如果无法分配新对象,则返回空指针。

我很惊讶标准没有指定realloc应该“尝试”进行就地重新分配。通常,如果重新分配的大小低于当前分配的大小,我希望标准能够确保realloc将返回相同的指针。

realloc如果尺寸减小,标准是否有不指定应就位的逻辑?

c standards memory-management realloc

4
推荐指数
1
解决办法
263
查看次数

r,ggplot2,形状/颜色.他们之间有什么区别?

set.seed(123)

library(data.table)
library(ggplot2)

dat=data.table(data.frame(a=rnorm(12),b=rnorm(12),c=rep(c(1,2),6),d=rep(c(1,2,3,4),3)))

ggplot(dat,aes(a,c,colour=d)) + geom_point() # line 1

ggplot(dat,aes(a,c,shape=d)) + geom_point() # line 2
Run Code Online (Sandbox Code Playgroud)

为什么第1行工作但第2行不工作?这不仅仅是地块的外观差异吗?

谢谢

r ggplot2

3
推荐指数
1
解决办法
2181
查看次数