这只是在这里回答另一个问题.当您使用rbind两个数据框时,它会按名称而不是索引匹配列,这可能会导致意外行为:
> df<-data.frame(x=1:2,y=3:4)
> df
x y
1 1 3
2 2 4
> rbind(df,df[,2:1])
x y
1 1 3
2 2 4
3 1 3
4 2 4
Run Code Online (Sandbox Code Playgroud)
当然,有一些解决方法.例如:
rbind(df,rename(df[,2:1],names(df)))
data.frame(rbind(as.matrix(df),as.matrix(df[,2:1])))
Run Code Online (Sandbox Code Playgroud)
在编辑:rename从plyr包中实际上并没有这样工作(虽然我认为我最初写这篇文章的时候有工作......).通过重命名来实现此目的的方法是使用SimonO101的解决方案:
rbind(df,setNames(df[,2:1],names(df)))
Run Code Online (Sandbox Code Playgroud)
也许,令人惊讶的是,
data.frame(rbindlist(list(df,df[,2:1])))
Run Code Online (Sandbox Code Playgroud)
通过索引工作(如果我们不介意数据表,那么它非常简洁),所以这是一个区别do.call(rbind).
问题是,rbind对于名称不匹配的两个数据框,最简洁的方法是什么?我知道这似乎微不足道,但这种事情最终会使代码混乱.而且我不想写一个叫做的新函数rbindByIndex.理想情况下它会是这样的rbind(df,df[,2:1],byIndex=T).
这已成为我的一个宠儿.我写了一个课,并实施Serializible.然后eclipse警告我,我没有serialVersionUID,所以我选择" 添加生成的serialVersionUID "或" 添加默认的serialVersionUID ",我最终得到这样的东西:
/**
*
*/
private static final long serialVersionUID = 4049849541314027178L;
Run Code Online (Sandbox Code Playgroud)
大多数时候我不想添加评论,所以我必须去删除评论.我宁愿默认是没有评论,但我已经查看了偏好中的代码模板,并没有想出如何更改它.我只是希望它看起来像这样:
private static final long serialVersionUID = 4049849541314027178L;
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个Java Executor,它允许我指定限制/吞吐量/起搏限制,例如,不超过100个任务可以在一秒钟内处理 - 如果更多任务被提交,他们应该排队并稍后执行.这样做的主要目的是避免在遇到外部API或服务器时遇到限制.
我想知道基础Java(我怀疑,因为我检查过)或其他可靠的地方(例如Apache Commons)是否提供了这个,或者我是否必须自己编写.最好是轻量级的.我不介意自己写,但如果有一个"标准"版本在那里,我至少想先看看它.
帮助页面runApp说:
运行一个闪亮的应用程序.此功能通常不会返回; 中断R以停止应用程序(通常按Ctrl + C或Esc).
"通常"是否意味着"永远"?有没有办法添加一个"退出"按钮并将值返回到调用的R会话runApp?即使它是一个黑客,这将是方便的功能.我试过一些搜索,但没有找到任何东西.我也查看了源代码runApp,最后一行是return(.globals$retval),所以看起来应该有办法.
我可以.globals$retval直接设置然后调用某种中断吗?shiny包中有功能吗?
关于Python内部的问题.如果我执行, import abc则Python将模块读入新的命名空间,abc并将全局命名空间中的变量绑定到新的命名空间.
如果我执行,from abc import xyz那么它将整个模块读abc入一个新的命名空间,然后将xyz全局命名空间中的变量绑定到同一个对象,该对象xyz在这个新创建的命名空间中被绑定到模块被读入的对象中.至少这是我的理解.
abc在那之后读入的命名空间会发生什么?我假设它存在于某个地方,因为xyz可能会访问该命名空间中的其他对象.可以abc以某种方式访问这个"鬼" 命名空间吗?
而且,我假设如果我这样做
from abc import xyz
from abc import fgh
Run Code Online (Sandbox Code Playgroud)
那么只有一个"ghost" abc命名空间,所以如果xyz和fgh修改相同的全局变量abc,那么它只会有一个副本.那是对的吗?
我有一个相当大的mysql表,大约30M行,6列,加载到内存时大约2GB.
我使用python和R.在R中,我可以将表加载到内存中,大约需要90秒.但在python中需要40分钟.
我用sqlalchemy和普通的pymysql都试过了.代码很简单,例如sqlalchemy:
db_engine = sqlalchemy.create_engine("mysql+pymysql://user:pass@host/database")
cnx = db_engine.connect()
table = pd.read_sql('select * from my_table',cnx)
cnx.close()
Run Code Online (Sandbox Code Playgroud)
没有sqlalchemy:
cnx = mysql.connector.connect(**db_details)
cursor = cnx.cursor()
cursor.execute('select * from my_table')
table = pd.DataFrame(data=list(cursor),columns = cursor.column_names)
cnx.close()
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,它都比R慢得多,这对我来说没有多大意义.为什么会这样,有什么方法可以加速它?即使是黑客也会这样做.
要补充一点,大熊猫花了这么长时间才与它有任何关系.在第二个代码片段中,如果我只是返回list(cursor)而不是将其放入pandas DataFrame中,它(基本上)需要同样长.
编辑时:数据库与R/Python在同一台机器上运行,因此所有内容在吞吐量方面都应该相同.
在RI am使用DBI,我使用的R代码(基本上)是这样的:
require(DBI)
cnx <- dbConnect(dbDriver("MySQL"),dbname="database",username="user",password="pass",host="host")
table <- dbGetQuery(cnx,"select * from my_table")
Run Code Online (Sandbox Code Playgroud)
********已解决(大部分)********
感谢有用的评论,特别是来自@roganjosh,看来问题是默认的mysql连接器是用python而不是C编写的,这使得它非常慢.解决方案是使用MySQLdb,这是一个本机C连接器.
在我的特定设置中,使用anaconda运行python 3,这是不可能的,因为MySQLdb仅在python 2中支持.但是,MySQLdb在名称下有一个for python 3 的实现mysqlclient.
使用这种实现方式,现在读取整个表格的时间大约为5分钟,而不是像R一样快,但远远低于之前的40左右.
我在集会上总是一个菜鸟,只是捅了一下看看发生了什么.无论如何,我写了一个非常简单的函数:
void multA(double *x,long size)
{
long i;
for(i=0; i<size; ++i){
x[i] = 2.4*x[i];
}
}
Run Code Online (Sandbox Code Playgroud)
我编译它:
gcc -S -m64 -O2 fun.c
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
.file "fun.c"
.text
.p2align 4,,15
.globl multA
.type multA, @function
multA:
.LFB34:
.cfi_startproc
testq %rsi, %rsi
jle .L1
movsd .LC0(%rip), %xmm1
xorl %eax, %eax
.p2align 4,,10
.p2align 3
.L3:
movsd (%rdi,%rax,8), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, (%rdi,%rax,8)
addq $1, %rax
cmpq %rsi, %rax
jne .L3
.L1:
rep
ret
.cfi_endproc
.LFE34:
.size multA, .-multA
.section .rodata.cst8,"aM",@progbits,8
.align …Run Code Online (Sandbox Code Playgroud) 我升级我的系统并重新安装R,现在我的标准的X-11地块不抗锯齿 - 他们看起来锯齿和字体很糟糕.
我似乎回忆起过去这样的问题,但不记得我对此做了什么.
其他一些信息:
qplot 也出来了非抗锯齿png设备也会产生非抗锯齿输出pdf然而,绘制到设备会产生漂亮的抗锯齿输出另一件事:我已经运行了这个版本的R/Ubuntu一段时间了,差不多几个月左右.我不知道这个绘图问题是否会立即开始使用新的R安装,或者我之后做了什么来打破它.我不记得以前注意到缺少抗锯齿,但我可能不会一直在关注,或做了很多策划的.
有谁知道修复是什么?目前,我运行v 3.2.1,从源头抓起,与Ubuntu 14.04.3 LTS编译.
还有一些事情.在这里讨论之后我尝试安装Cairo,但它失败了.此外,我已经能够在R/linux中获得非消除锯齿的图,而不会在过去安装Cairo,如果没有必要,我宁愿不安装额外的东西.
这是我的X11.options():
$display
[1] ""
$width
[1] NA
$height
[1] NA
$pointsize
[1] 12
$bg
[1] "transparent"
$canvas
[1] "white"
$gamma
[1] 1
$colortype
[1] "true"
$maxcubesize
[1] 256
$fonts
[1] "-adobe-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*"
[2] "-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*"
$family
[1] "sans"
$xpos
[1] NA
$ypos
[1] NA
$title
[1] ""
$type
[1] "Xlib"
$antialias
[1] "default"
Run Code Online (Sandbox Code Playgroud) 我有一个 ABC 方法,子类应该返回他们自己的类型,我正在尝试找出最好的方法来提示这个。例如:
from abc import ABC, abstractmethod
class Base(ABC):
@abstractmethod
def f(self): ## here i want a type hint for type(self)
pass
class Blah(Base):
def __init__(self, x: int):
self.x = x
def f(self) -> "Blah":
return Blah(self.x + 1)
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是这个,它有点沉重:
from abc import ABC, abstractmethod
from typing import TypeVar, Generic
SELF = TypeVar["SELF"]
class Base(ABC, Generic[SELF]):
@abstractmethod
def f(self) -> SELF:
pass
class Blah(Base["Blah"]):
def __init__(self, x: int):
self.x = x
def f(self) -> "Blah":
return Blah(self.x+1)
Run Code Online (Sandbox Code Playgroud)
我有更好/更清洁的方法吗?
numpy 可以使用整数或布尔值索引部分分配数组,如下所示:
import numpy as np
x = np.arange(5)
x[[2,4]]=0
x
## array([0., 0., 1., 0., 1.])
x[[True]*2+[False]*3]=2
x
## array([2., 2., 1., 0., 1.])
Run Code Online (Sandbox Code Playgroud)
但是,即使x[[2,4]]在这种情况下位于左值中,也不能将左值分配给另一个变量,因为在这种情况下,分配是由进行的__setitem__,而__getitem__当传递整数或布尔值列表时,会创建一个副本:
x = np.arange(5)
y = x[[2,4]]
y[:] = 1
x
array([0., 0., 0., 0., 0.])
Run Code Online (Sandbox Code Playgroud)
问题:是否有任何简单/干净的方法来获取基于整数索引或布尔索引的索引子集的可写数组视图?“简单/干净”的意思是我要避免编写新类或自己跟踪子索引。基本上,我正在寻找一些numpy我无法使用Google的功能或技巧。
这个问题的重点是能够递归执行此操作,以便能够通过仅传递数组的视图而不是传递索引以及基本数组来创建分配给数组片段的函数。