我正在调用ggplot函数
ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)
结果是一个条形图,其中条形图由对应于类别的各种颜色填充.但是,从条到条的颜色排序并不一致.说有粉红色,绿色和蓝色.有些酒吧从下到上呈粉红色,绿色,蓝色,有些则呈绿色,粉红色,蓝色.我没有看到任何明显的模式.
这些订单是如何选择的?我该怎么改变它?至少,我如何让ggplot选择一致的排序?
(x,y和类别)的类别分别是(整数,数字和因子).如果我将类别设为有序因子,则不会更改此行为.
有人知道怎么修这个东西吗?
可重复的例子:
dput(data)
structure(list(mon = c(9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L,
10L, 12L, 11L, 7L, 12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L,
7L, 11L, 10L, 8L, 7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L,
9L, 9L, 8L), gclass = structure(c(9L, 1L, 8L, 6L, 4L, 4L, 3L,
6L, 2L, 4L, 1L, 1L, 5L, 7L, 1L, 6L, 8L, 6L, 4L, 7L, 8L, 7L, 9L,
8L, 3L, 5L, 9L, 2L, …Run Code Online (Sandbox Code Playgroud) 这是一个错误吗?
import numpy as np
a1=np.array(['a','b'])
a2=np.array(['E','F'])
In [20]: add(a1,a2)
Out[20]: NotImplemented
Run Code Online (Sandbox Code Playgroud)
我正在尝试按元素进行字符串连接.我认为Add()是在numpy中实现它的方法,但显然它没有按预期工作.
试图将int数组转换为numpy中的字符串数组
In [66]: a=array([0,33,4444522])
In [67]: a.astype(str)
Out[67]:
array(['0', '3', '4'],
dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
不是我的意图
In [68]: a.astype('S10')
Out[68]:
array(['0', '33', '4444522'],
dtype='|S10')
Run Code Online (Sandbox Code Playgroud)
这可行,但我必须知道10足够大,可以保持我最长的字符串.有没有办法在不事先知道你需要什么尺寸的字符串的情况下轻松完成这项工作?它似乎有点危险,它只是静静地截断你的字符串而不会抛出错误.
我认为元编程在这里是正确的术语.
我希望能够使用data.table,就像在webapp中使用MySQL一样.也就是说,Web用户使用一些Web前端(例如Shiny服务器)来选择数据库,选择要过滤的列,选择要分组的列,选择要聚合的列和聚合函数.我想使用R和data.table作为查询,聚合等的后端.假设前端存在,R将这些变量作为字符串,并验证它们等.
我编写了以下函数来构建data.table表达式并使用R的parse/eval元编程功能来运行它.这是一种合理的方法吗?
我包括所有相关代码来测试这个.获取此代码(在读取安全性之后!)并运行test_agg_meta()来测试它.这只是一个开始.我可以添加更多功能.
但我的主要问题是我是否过度思考这一点.有没有更直接的方法来使用data.table,所有的输入都是事先确定的,而不需要求助于parse/eval元编程?
我也知道"with"声明和一些其他无糖功能方法,但不知道他们是否可以处理所有情况.
require(data.table)
fake_data<-function(num=12){
#make some fake data
x=1:num
lets=letters[1:num]
data=data.table(
u=rep(c("A","B","C"),floor(num/3)),
v=x %%2, w=lets, x=x, y=x^2, z=1-x)
return(data)
}
data_table_meta<-function(
#aggregate a data.table meta-programmatically
data_in=fake_data(),
filter_cols=NULL,
filter_min=NULL,
filter_max=NULL,
groupby_cols=NULL,
agg_cols=setdiff(names(data_in),groupby_cols),
agg_funcs=NULL,
verbose=F,
validate=T,
jsep="_"
){
all_cols=names(data_in)
if (validate) {
stopifnot(length(filter_cols) == length(filter_min))
stopifnot(length(filter_cols) == length(filter_max))
stopifnot(filter_cols %in% all_cols)
stopifnot(groupby_cols %in% all_cols)
stopifnot(length(intersect(agg_cols,groupby_cols)) == 0)
stopifnot((length(agg_cols) == length(agg_funcs)) | (length(agg_funcs)==1) | (length(agg_funcs)==0))
}
#build the command
#defaults
i_filter=""
j_select=""
n_agg_funcs=length(agg_funcs)
n_agg_cols=length(agg_cols)
n_groupby_cols=length(groupby_cols)
if (n_agg_funcs == 0) …Run Code Online (Sandbox Code Playgroud) 通过一个例子,这将更有意义.CRAN的典型R手册显示R代码,其中一行以>开头,而缩进用+表示.有关 示例,请参见 http://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf.
麻烦的是你不能将它剪切并粘贴到控制台而不将其复制到编辑器中并删除那些箭头和加号字符.是否有更简单的方法将该文本作为R代码执行?我认为有人必须处理这个问题.否则,我想我会写一个脚本.
我试图找到正确的语言来描述以下概念.也许有人可以帮助我.
这是关于编程的一般问题,但我将使用Python和R作为示例.
在Python中,我们可以在这样的字典中放置一些东西
myData = {}
myData["myField"] = 14
Run Code Online (Sandbox Code Playgroud)
在R中,例如,使用data.table包,我们可以写类似的东西
data = data.table(x = c(1, 2, 3))
data[,myField: = x^2]
Run Code Online (Sandbox Code Playgroud)
这些做了不同的事情,但比较了每个人的第二行.在Python中,它"myField"是一个字符串.在R data.table示例中,没有字符串.R示例有点好,因为它可以节省您的输入,但如果您想编写myField一个变量的程序,它会给您带来麻烦.在Python中,这是微不足道的,因为你可以做到
myData[myVariable] = 14
Run Code Online (Sandbox Code Playgroud)
与myVariable被定义为另一个字符串.在R中,你也可以这样做,但必须使用不同的语法,这意味着你必须知道两种完全不同的语法编程方式.
我的问题:这叫什么?我知道它与范围规则有关(也许是元编程?),但无法找到适合它的语言.任何人?
在我的Mac上的anaconda发行版中,一切似乎都运行良好.然后我尝试用conda install psycopg2安装postgres库psycopg2.这引发了一个错误.关于权限的事情.但现在没有任何作用.现在它甚至找不到conda可执行文件或启动ipython.-bash:conda:command not found应该是condo可执行文件在〜/ ananconda/bin中.目录在那里,但没有conda可执行文件.
任何人都知道可能发生了什么或我如何从中恢复?
我对jQuery中的document.ready有点困惑.
你什么时候在$(document).ready()中定义javascript函数,什么时候不?
将所有javascript代码放在$(document).ready()中是否足够安全?
你不这样做会发生什么?
例如,我使用通常的jQuery选择器,当你点击东西时它会做一些事情.如果你不用document.ready包装它们有什么危害?
如果在页面加载之前有人在分秒中单击元素,它是否只会导致问题?或者它会导致其他问题吗?
假设我有一个叫Star有属性的类color.我可以得到颜色star.color.
但是如果我有这些Star对象的NumPy数组怎么办呢.获取颜色数组的首选方法是什么?
我可以做到
colors = np.array([s.color for s in stars])
Run Code Online (Sandbox Code Playgroud)
但这是最好的方法吗?如果我可以像其他语言那样做colors = star.color或colors = star->color其他语言,那将会很棒.在numpy中有一种简单的方法吗?
假设我在32 GB的服务器上有一个4GB的数据集.
我可以将所有内容读入R中,创建一个data.table全局变量,并让我的所有函数都将全局函数用作内存中的数据库.但是,当我退出R并重新启动时,我必须再次从磁盘读取它.即使使用智能磁盘缓存策略(保存/加载或R.cache),我也有10秒的延迟,因此获取该数据.复制该数据大约需要4秒.
有没有一种很好的方法可以将其缓存在内存中,以便在R会话退出后继续存在?
想到几件事,RServe,redis/Rredis,Memcache,多核...... Shiny-Server和Rstudio-Server似乎也有解决这个问题的方法.
但话说回来,似乎data.table可能提供此功能,因为它似乎无论如何都会将数据移出R的内存块.这将是理想的,因为它不需要任何数据复制,重组等.
更新:
我运行了一些更详细的测试,我同意下面的评论,我可能没有太多抱怨.
但是这里有一些其他人可能会觉得有用的数字.我有一个32GB的服务器.我创建了一个4GB大小的data.table.根据gc()并且还看顶部,它似乎使用了大约15GB的峰值内存,其中包括制作一份数据.我觉得这很好.
我用save()写入磁盘,删除了对象并使用load()重新制作它.这分别花了17秒和10秒.
我对R.cache包做了同样的事情,这实际上更慢了.23秒和14秒.
然而,这两个重载时间都非常快.load()方法给出了357 MB/s的传输速率.相比之下,副本需要4.6秒.这是一个虚拟服务器.不确定它具有什么类型的存储或读取速度受缓存影响的程度.