我知道编译器会"省略int foo = 0;为字段生成代码因为内存分配器会将字段初始化为默认值." 参考
class Foo
{
public int a = 1;
public int b = 0;
}
Foo..ctor:
IL_0000: ldarg.0
IL_0001: ldc.i4.1
IL_0002: stfld UserQuery+Foo.a // There is no b.
IL_0007: ldarg.0
IL_0008: call System.Object..ctor
IL_000D: ret
Run Code Online (Sandbox Code Playgroud)
我也知道"编译器会自动添加.locals init每个使用局部变量的方法,表明JIT必须在开始执行方法之前注入初始化所有局部变量的代码." 参考
为什么编译器没有int foo = 0;为局部变量之类的东西省略生成IL,因为.locals init已经覆盖了它?(为了与字段保持一致?)
(我理解C#规范要求明确分配局部变量,我很好.)
(我引用的链接说明了为什么.locals init需要,以及为什么C#规范要求初始化本地化.但是它没有说明为什么必须存在额外的IL指令来初始化默认值.因为验证过程已经确定了.locals init)
void Main()
{
int a = 0;
int b = 1;
int c = 0; …Run Code Online (Sandbox Code Playgroud) struct Point
{
public int x;
public int y;
}
void Main()
{
Point p;
p.x = 1;
p.y = 1;
Object o = p;
((Point) o).x = 4; // error
((Point) o).x = 5; // error
((Point) o).x = 6; // error
p = (Point) o // expect 6
}
Run Code Online (Sandbox Code Playgroud)
为什么不编译
ldloc.1 // o
unbox Point
ldc.i4.4
stfld Point.x
Run Code Online (Sandbox Code Playgroud)
C++ CLI允许的地方.
我知道我能做到这一点
a <- dt[,sum(x), by=y]
Run Code Online (Sandbox Code Playgroud)
我也可以这样做
dt[,z:=sum(x), by=y] # this would modify dt
Run Code Online (Sandbox Code Playgroud)
但是我不知道为什么我不能这样做:
a <- dt[,z=sum(x), by=y]
Run Code Online (Sandbox Code Playgroud)
如何使用自定义列名称执行"汇总"?
这是唯一的选择吗?
a <- copy(dt)
a[,z:=sum(x), by=y]
Run Code Online (Sandbox Code Playgroud) 我知道我可以这样做:
x <- list(a=1, b=1)
y <- list(a=1)
JSON <- rep(list(x,y),10000)
sapply(JSON, "[[", "a")
Run Code Online (Sandbox Code Playgroud)
但是,我以$同样的方式努力使用
sapply(JSON, "$", "a")
sapply(JSON, "$", a)
Run Code Online (Sandbox Code Playgroud)
另外,是否可以将运算符用作其他语言的函数?
例如a + b 相当于(+)(a, b)
例如,我想将颜色z映射到0,将地图映射到"白色".
> a <- data.frame(x=1:10, y=1, z=c(rnorm(8),-12,12))
> a
x y z
1 1 1 -0.4603911
2 2 1 -0.4868471
3 3 1 0.2180346
4 4 1 -0.8807652
5 5 1 1.7379462
6 6 1 -0.1334904
7 7 1 -0.3675578
8 8 1 0.9225425
9 9 1 -12.0000000
10 10 1 12.0000000
ggplot(a,aes(x=x,y=y,fill=z)) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red")
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,颜色并不是真正有用的指标,而不是传达关于值如何分布的一般概念,现在颜色只能告诉哪些值是极端的,留下大多数值无法区分未经训练的眼睛.
有一种方法在geom_raster中的值范围内进行非线性颜色分布,但它看起来有点复杂,我只能模糊地理解它是如何工作的.

然后我想也许order是一个很好的重新缩放方式,因此:
ggplot(a,aes(x=x,y=y,fill=ecdf(z)(z))) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red", midpoint=ecdf(a$z)(0))
Run Code Online (Sandbox Code Playgroud)
它在某种程度上起作用(这里我使用ecdf而不是order …
> x <- data.table(a=1:10, b=rep(1:2, 5))
> x
a b
1: 1 1
2: 2 2
3: 3 1
4: 4 2
5: 5 1
6: 6 2
7: 7 1
8: 8 2
9: 9 1
10: 10 2
> x[,c:=mean(a), by=b]
> y <- x$c
> y
[1] 5 6 5 6 5 6 5 6 5 6
Run Code Online (Sandbox Code Playgroud)
最终,我感兴趣的y是一个向量,我不想添加c到data.table.有没有更简单的方法y从原来的x?
当我试图在直方图中对不同的组应用不同的权重时出现问题.
# here weight would be the same for …Run Code Online (Sandbox Code Playgroud) 从ggplot2中绘制累计计数中借用示例
x <- data.frame(A=replicate(200,sample(c("a","b","c"),1)),X=rnorm(200))
ggplot(x,aes(x=X,color=A)) + stat_bin(aes(y=cumsum(..count..)),geom="step")
Run Code Online (Sandbox Code Playgroud)

如您所见,cumsum跨小组和多方面工作。我想知道为什么会这样吗?显然..count..是在组内完成的,为什么cumsum不应用于..count..?ggplot是否在内部将所有内容..count..整合到一个向量中然后应用于cumsum它?
如何在不进行预处理的情况下(例如使用)正确解决它plyr?
而且我不介意geom不是step,只要图形是累积图就可以line,甚至可以bar。
我想了解原因
SELECT *, regexp_matches(A, 'pattern') FROM table
Run Code Online (Sandbox Code Playgroud)
只会返回A有模式的行pattern,即使我没有WHERE子句?
regexp_matches如果没有匹配会返回什么?我原以为是null,但如果是,null那么查询应该只返回null所有那些不匹配的结果?
如何构建自定义函数来执行类似的操作:当参数适合时,相应的行将被过滤,以便我不必追加where?
我知道的iterator是iterable,但只有一次通过.
例如,许多功能中itertools取iterable为参数,例如islice.iterator如果我看到api说的话,我可以随时通过iterable吗?
正如@delnan指出:
虽然每个
iterator都是一个iterable,但有些人(在核心团队之外)说"可迭代",当他们的意思是"可以用相同的结果迭代几次".野外的一些代码声称可以使用iterables但实际上不起作用iterators.
这是我的担忧.是否有iterable支持多通道的名称?喜欢IEnumerableC#?
如果我要构建一个声称支持的功能iterable,那么实际支持iterator也是最佳实践吗?
例如:
dt <- data.table()
x=1:5
> dt[,list(2,3,x)]
V1 V2 x
1: 2 3 1
2: 2 3 2
3: 2 3 3
4: 2 3 4
5: 2 3 5
Run Code Online (Sandbox Code Playgroud)
结果data.table有列 x
出于某种原因,我想创建一个简化data.table构造的函数.
tt <- function(a, b, ...){
list(a=sum(a), b=sum(b), ...)
}
> dt[,tt(1:2,1:3,x)]
a b V3
1: 3 6 1
2: 3 6 2
3: 3 6 3
4: 3 6 4
5: 3 6 5
Run Code Online (Sandbox Code Playgroud)
因此,每当我打电话时list,我都会使用tt它,因此它会自动为我插入预定义的列.但是,现在它无法识别快捷方式命名x.
如果不太难,如何在data.table中改进tt自动命名列list?