有一天R-gotcha让你真的感到惊讶吗?我想我们都可以分享这些.
这是我的:在列表索引中,my.list[[1]]不是my.list[1].在R的早期学到了这一点.
可能重复:
调试R的一般建议?
我最近开始使用browser()函数定义进行调试(一个很棒的工具!).我觉得print()调试一直在减缓我内置调试工具的学习曲线.我失踪了的其他一些人是什么?
我有一个模型formset,我需要传递关键字initial in(在formset中有一些初始值,例如设置为今天的日期).据我所知,queryset参数(默认为YourModel.objects.all())会覆盖此功能,以便创建初始空表单.我将查询集指定为:YourModel.objects.none(),它阻止它使用数据库中的条目填充formset,但我仍然无法弄清楚如何有效地传递initial.我是否需要从ModelForm子类化方法?
我遇到了很多"令人尴尬的并行"项目,我想与multiprocessing模块并行化.但是,它们通常涉及读取大文件(大于2GB),逐行处理,运行基本计算,然后写入结果.使用Python的多处理模块拆分文件并处理文件的最佳方法是什么?如若Queue或JoinableQueue在multiprocessing使用?还是Queue模块本身?或者,我应该使用multiprocessing?在一个进程池上映射可迭代文件?我已经尝试了这些方法,但是在逐行分配数据方面的开销是巨大的.我已经使用了一个轻量级的管道过滤器设计cat file | process1 --out-file out1 --num-processes 2 | process2 --out-file out2,它将第一个进程的一定比例的输入直接传递给第二个输入(参见这篇文章),但是我想要一个完全包含在Python中的解决方案.
令人惊讶的是,Python文档没有提出这样做的规范方法(尽管multiprocessing文档中有关编程指南的冗长部分).
谢谢,文斯
附加信息:每行的处理时间各不相同.有些问题很快,几乎没有I/O限制,有些是受CPU限制的.CPU绑定的非依赖任务将从并行化获得后期,使得即使是低效的将数据分配给处理功能的方式在挂钟时间方面仍然是有益的.
一个主要的例子是一个脚本,它从行中提取字段,检查各种按位标志,并将具有某些标志的行以全新格式写入新文件.这似乎是一个I/O限制问题,但是当我使用带有管道的廉价并发版本运行它时,速度提高了大约20%.当我使用池和映射运行它时,或者队列中的队列multiprocessing总是超过100%.
我遇到了重塑大型数据帧的困难.我过去一直很幸运地避免重塑问题,这也意味着我很糟糕.
我当前的数据框看起来像这样:
unique_id seq response detailed.name treatment
a N1 123.23 descr. of N1 T1
a N2 231.12 descr. of N2 T1
a N3 231.23 descr. of N3 T1
...
b N1 343.23 descr. of N1 T2
b N2 281.13 descr. of N2 T2
b N3 901.23 descr. of N3 T2
...
Run Code Online (Sandbox Code Playgroud)
而且我想:
seq detailed.name T1 T2
N1 descr. of N1 123.23 343.23
N2 descr. of N2 231.12 281.13
N3 descr. of N3 231.23 901.23
Run Code Online (Sandbox Code Playgroud)
我已经研究过reshape包,但我不确定如何将处理因子转换为单独的列名.
谢谢!
编辑:我尝试在我的本地机器(4GB双核iMac 3.06Ghz)上运行它并且它一直失败:
> d.tmp.2 …Run Code Online (Sandbox Code Playgroud) 我一直在讨论multicore包和大对象的问题.基本思想是我使用Bioconductor函数(readBamGappedAlignments)来读取大对象.我有一个文件名的字符向量,我一直在使用mclapply循环文件并将它们读入列表.该函数看起来像这样:
objects <- mclapply(files, function(x) {
on.exit(message(sprintf("Completed: %s", x)))
message(sprintf("Started: '%s'", x))
readBamGappedAlignments(x)
}, mc.cores=10)
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到以下错误:Error: serialization is too large to store in a raw vector.但是,似乎我可以单独读取相同的文件而不会出现此错误.我在这里找到了这个问题的提法,没有解决.
任何并行的解决方案建议都将受到赞赏 - 这必须并行完成.我可以看看雪,但我有一个非常强大的服务器,有15个处理器,每个8核,256GB的内存,我可以做到这一点.我宁愿在这台机器上跨核心进行,而不是使用我们的一个集群.
我想知道真正伟大的程序员(Knuth,Kernighan,Torvalds等)是否是广泛的单元测试的拥护者.我可以想象他们为解决协作扩展问题而加入它们的大型项目,但是,Knuth在TeX中使用单元测试吗?这并不会影响我使用它们的决定,这只是好奇心的问题.
无论您在编程C或Java方面多么熟练,都应该考虑在您的技能集中添加多线程编程.
这不是你应该自己学习的东西.学习它比顺序编程更难.如果您是技术经理,您应该投资重新培训多线程编程中的关键人员.您还可以监视并发编程语言中的研究活动(如上所列).你可以肯定你的竞争对手会.
这是本文的引用.我想我们这里的大多数人都非常精通自己教授不同的语言,数据结构,算法等等,而且我确实认识到正确进行并行编程需要进行的心理转变.
我拒绝接受一个人无法自己"正确"学习并行编程的想法.那么教授自己并行编程最负责任的方法是什么?建议使用哪些书籍和其他资源?
编辑:以下是一些更多细节.我主要将这些应用于科学计算,但我一直在寻找与语言无关的一般材料/建议.我也在寻找一种健康的实用理论.想象一下,你有一个优秀的开发人员喜欢数学和计算机科学,但从未参加并行编程课程.现在想象他有一个问题的最后期限(比如1年),你必须给他一些材料来确定并行化是否有用,以及如何正确实现它.你会给他什么资源?这就是我(我希望其他开发人员)对学习并行化/多线程感兴趣的方式.
这就是我想要做的事情:当按下Cc Cl时,如果没有终端窗口,则启动一个新的终端窗口,然后,在该终端中,使用一些标志和当前缓冲区的文件调用gcc.我该怎么办?
我正在学习C,并且出现了保护数字和舍入错误的想法.脚本语言的实践者(我在这里想到Python和Perl)需要担心这些东西吗?如果他们正在做科学编程怎么办?
我正在编写一个在当前目录中创建包的脚本(使用BioConductor的pdInfoBuilder),我想在脚本运行时安装它.install.packages()与repo = NULL似乎是一个明显的选择,但这似乎只有包目录tarballed和gzipped.有没有办法可以覆盖它,因为该create.pkg()函数不会创建*.tar.gz?目前我正在使用:
R CMD INSTALL package.name
Run Code Online (Sandbox Code Playgroud)
谢谢,文斯
我正在使用Django测试框架(这很有用,但感觉很笨拙和笨拙).测试一直在失败,并且追溯使我相信这是登录装饰者的问题.以下是测试,错误和相关代码:
class TestMain(TestCase):
fixtures = ['timetracker']
def test_login(self):
c = Client()
login = c.login(username='testclient', password='not.a.real.password')
self.failUnless(login, 'Could not log in')
def test_main(self):
c = Client()
login = c.login(username='testclient', password='not.a.real.password')
self.failUnless(login, 'Could not log in')
response = c.get('/', follow=True)
print response.content
#assert response.status_code == 200, response.status_code
markov:biorhythm vinceb$ nosetests -v --with-django
test_login (biorhythm.timetracker.tests.test_urls.TestMain) ... ok
test_main (biorhythm.timetracker.tests.test_urls.TestMain) ... ERROR
======================================================================
ERROR: test_main (biorhythm.timetracker.tests.test_urls.TestMain)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/vinceb/Code/python/biorhythm/timetracker/tests/test_urls.py", line 20,
in test_main
response = c.get('/', follow=True)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/test/client.py", …Run Code Online (Sandbox Code Playgroud) 也许我一直在喝太多的函数编程Kool Aid,但列表推导的这种行为似乎是一个糟糕的设计选择:
>>> d = [1, 2, 3, 4, 5]
>>> [d.pop() for _ in range(len(d))]
[5, 4, 3, 2, 1]
>>> d
[]
Run Code Online (Sandbox Code Playgroud)
为什么d不复制,然后复制的词法范围版本没有变异(然后丢失)?列表推导的重点似乎应该是返回所需的列表,而不是返回列表并默默地改变幕后的其他对象.破坏d有些暗示,似乎是非战争的.这有一个很好的用例吗?
为什么列表组件的行为与循环完全相同,而不是像函数一样(从函数式语言,本地范围)?
r ×5
django ×2
python ×2
bioconductor ×1
c ×1
concurrency ×1
dataframe ×1
debugging ×1
emacs ×1
multicore ×1
r-faq ×1
reshape ×1
testing ×1
unit-testing ×1