这里有两个替代代码(在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)
什么是好的做法?哪个代码更快?哪个代码消耗的内存较少?哪个代码不易出错?为什么?
考虑以下示例:
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个框架?
设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(..))吗?
我尝试在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.
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_custom并textGrob为此目的,但未能在图形上打印任何内容。
C++新手在这里!有一个类Individual分配了很多记忆,所以我们想避免复制.设mother和father是两个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) 我试图将传递方法作为函数参数包裹起来.这是一个简单的示例,它返回我不理解的编译错误
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) 考虑下图
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 的解决方案)?
来自 c99:
该
realloc函数释放指向的旧对象,ptr并返回一个指向大小由 size 指定的新对象的指针。新对象的内容应与释放前的旧对象的内容相同,直到新旧大小中较小的一个。新对象中超出旧对象大小的任何字节都具有不确定的值。[..]
realloc 函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值),如果无法分配新对象,则返回空指针。
我很惊讶标准没有指定realloc应该“尝试”进行就地重新分配。通常,如果重新分配的大小低于当前分配的大小,我希望标准能够确保realloc将返回相同的指针。
realloc如果尺寸减小,标准是否有不指定应就位的逻辑?
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行不工作?这不仅仅是地块的外观差异吗?
谢谢