小编Kos*_*lma的帖子

转换简单的ggplot2代码以使用data.table

我的旧代码看起来像这样:

library(ggplot2)
gp<-ggplot(NULL,aes(x=Income))
gp<-gp+geom_density(data=dat$Male,color="blue")
gp<-gp+geom_density(data=dat$Female,color="green")
gp<-gp+geom_density(data=dat$Alien,color="red")
plot(gp) #Works
Run Code Online (Sandbox Code Playgroud)

现在我开始使用优秀的data.table库(而不是data.frame):

library(data.table)
cols<-c("blue","green","red")
gp<-ggplot(NULL,aes(x=Income))
dat[, list(gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
#I even tried
dat[, list(gp<-gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
plot(gp) #Error: No layers in plot
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题,但似乎我在J()中运行的代码在外部范围内没有得到识别.

我怎样才能以data.table惯用的方式实现这一目标?

r ggplot2 data.table

9
推荐指数
1
解决办法
7208
查看次数

一位读者 一位作家.关于互斥体和原子内置函数的一些常见问题

我有一个父级和一个工作线程共享一个bool标志和一个std :: vector.父只读取(即读取bool或调用my_vector.empty()); 工人只写.

我的问题:

  • 我需要互斥保护bool旗吗?

  • 我可以说所有bool读/写都是固有的原子操作吗?如果您说"是"或"否",您从哪里获取信息?

  • 我最近听说过GCC Atomic-builtin.我可以使用这些来使我的标志读/写原子而不必使用互斥锁吗?有什么不同?我理解Atomic builtins归结为机器代码,但即使是互斥体也归结为CPU的内存屏障指令吧?为什么人们将互斥锁称为"操作系统级别"构造?

  • 我需要互斥保护我的std :: vector吗?回想一下,工作线程填充这个向量,而父对象只调用它上面的empty()(即只读取它)

  • 我不相信bool或vector都需要互斥保护.我合理化如下,"好吧,如果我在更新之前读取共享内存...那仍然没问题,我将在下一次获得更新的值.更重要的是,我不明白为什么写入者应该被阻止阅读正在阅读,因为毕竟,读者只是在阅读!"

如果有人可以指出我正确的方向,那将是非常好的.我在GCC 4.3上,而Intel x86是32位.非常感谢!

c++ multithreading mutex

7
推荐指数
1
解决办法
2003
查看次数

这是原子地读取和写入bool的正确方法吗?

布尔标志由两个线程切换.以下代码是否有意义?

static bool ATOMIC_BOOL_READ( volatile bool& var )
{
    return __sync_fetch_and_or(&var, 0);
}

static void ATOMIC_BOOL_WRITE(volatile bool& var, bool newval )
{
    __sync_bool_compare_and_swap( &var, !newval, newval);
}
Run Code Online (Sandbox Code Playgroud)

请注意以下几点:

  • 我正在传递一个bool引用.合理?

  • 为了一蹴而就,我也宣称它不稳定.

  • 功能是静态的

更新:

我想问的基本问题是:原子性和记忆障碍之间的区别是什么?如果线程A正在变量foo上执行原子内置,则线程B不能对变量foo执行任何操作; 因此创造了一个记忆障碍?

c++ multithreading atomic

3
推荐指数
2
解决办法
4189
查看次数

J内部的行为不一致?

这是一个人为的例子(因此缺乏输出),但很简单(希望)能够证明我的问题.我想计算按"Country"和"FavoriteColor"分组的每个子组的mean()收入.

#For a single subgroup
mean(dat[J("Blue","Nigeria")]$Income)   #dat is a data.table object             
#For all the subgroups...in the output I obviously 
#see the mean() for Blue/Nigeria subgroup. So far so good.
dat[,mean(Income),by=list((FavoriteColor,Country)]   
Run Code Online (Sandbox Code Playgroud)

但现在,我不想只是mean(),而是想要子组的所有Income summary()统计信息.所以我只是......

#For a single subgroup
summary(dat[J("Blue","Nigeria")]$Income)                
#For all the subgroups... but this doesn't do what I expect. 
#It seems to computing something else entirely; I think
#its calling summary() on each row
dat[,summary(Income),by=list(FavoriteColor,Country)]   
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

r data.table

-1
推荐指数
1
解决办法
60
查看次数

标签 统计

c++ ×2

data.table ×2

multithreading ×2

r ×2

atomic ×1

ggplot2 ×1

mutex ×1