独栋和联排买哪种好呢?

N
Nisayer
楼主 (未名空间)
简单的说, 就是一坨屎

甚至不如Perl

最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值程序,用的库少,没啥感觉

折腾了一段发现的缺点

1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现A库 2 不用能, B库 3 不能用

2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制锁进什么的,无结束符 纯粹是精神病的想法, 人类发明语言几千年好不容易在书写文字里确定了标点符号,尼玛一精神病又把这东西搞回去了, 别的不说, 2是 print a, 3是 print (a), 麻痹的 print是个函数你一开始搞 print a 不是精神病是啥, 至
于强制锁进导致的问题,我都懒的说了,python把行尾无结束符当成一种精神病宣扬,导致新语言 swift julia 之流的都一个德行, 真他妈it业就是尼玛逆淘汰

3. 库, python是所谓的胶水语言,说白了大多数时间要用库,要用别人的库,要尽
量用别人的库, 问题是尼玛的库不稳定啊, 三天一小改五天一大改,程序跑着跑着好好的,隔天update了个库, 突然发现某 api消失了, 我日你先人板板
这还不算啥,用几天发现作者不维护了,你说咋办,半路上先放着自己的活去替他维护code?
当然了, 这个毛病不是python 一家的,整个开源行业都是这德行, 都是被 ibm这种货色带的, 家里什么东西做烂了,没人愿意动了,开源, eclipse 就是这种典型,
eclipse 前身 visualage for java 那做的简直就是一坨屎,结果开源了,就因为免费
,再加上一帮傻逼+穷鬼瞎吹捧,居然给捧得高高的 (00年左右但凡用过visual age的
估计都会同意我的看法)

折腾了这么久,突然感觉还不如一开始上java, 估计现在也差不多出来了

语言的严谨性和可读性真的比少打两个字什么的重要多了,至于强制编程格式, 卧槽
,现在还有不支持自动格式化的编辑器吗

本来还想骂python的变量 赋值什么的,实在是懒得骂了, python 就是个典型,本来
一个人制造的垃圾,当当 shell script还可以,结果傻逼一吹捧,乱七八糟一加,就
成了半坨屎,勉强能用,一用全是坑
e
eviking
2 楼
Perl语法也奇葩..........我不喜欢Perl和Python。

大家都是老实人,规规矩矩地说人话不行吗,非得弄出那么多稀奇古怪的写法来。
w
wiseoldowl
3 楼
Life is short, you need Python
d
dumbCoder
4 楼
直接用python3, python比swift稳定多了, perl就不要拿出来比了...
python的强制缩进是,是为了读代码方便.
如果想reproduce installation, 用 pip -r requrements.txt.
你用Java的开源库, 也是要维护版本号的呀.
w
walkrandom
5 楼
太搞了,每行结束不都有个\n . 真的看不见?
a
ananpig
6 楼
嗳哟。

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
c
convergence
7 楼
一看你就不是科班出身的。知道cobol吗?

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
l
lemondream
8 楼
Go on
【 在 convergence (Rex💪🐶🐱🌎&) 的大作中提到: 】
: 一看你就不是科班出身的。知道cobol吗?
h
heteroclinic
9 楼
Python应该是背后有VC要搞llvm,可惜,连个specification都写不出来,和老高比语无伦次人太多。
h
heteroclinic
10 楼
都觉得自己有两下子
a
altay
11 楼
喷的太没水平,前面说的对,八成是转行的

你要吐槽GIL之类还有的一说

[在 Nisayer (si fata sinata) 的大作中提到:]
:简单的说, 就是一坨屎
:甚至不如Perl
:最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数
值程序,用的库少,没啥感觉
:折腾了一段发现的缺点
:1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有:这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发
现A库 2 不用能, B库 3 不能用
:于强制锁进导致的问题,我都懒的说了,python把行尾无结束符当成一种精神病宣扬
,导致新语言 swift julia 之流的都一个德行, 真他妈it业就是尼玛逆淘汰
:量用别人的库, 问题是尼玛的库不稳定啊, 三天一小改五天一大改,程序跑着跑着
好好的,隔天update了个库, 突然发现某 api消失了, 我日你先人板板
:这还不算啥,用几天发现作者不维护了,你说咋办,半路上先放着自己的活去替他维
护code?
:当然了, 这个毛病不是python 一家的,整个开源行业都是这德行, 都是被 ibm这种
货色带的, 家里什么东西做烂了,没人愿意动了,开源, eclipse 就是这种典型,
:..........
i
iambright
12 楼
喜欢末尾加;人家也没限制你,
既然知道是胶水语言,喜欢java库还非要用python库?

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
w
wukongjj
13 楼
Too young too naive. VisualAge was written mainly in Smalltalk while Eclipse in Java. You want to compare an apple with orange?
Do some research before you complain about it!
m
magicknight
14 楼
你这喷的也不对路吧。

还有抱怨别人更新了改接口的?不就是一版本管理问题么。

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
z
zero7
15 楼
go with C
x
xyliu
16 楼
GIL +1

大部分人开始时碰不到GIL。等碰上时已经Hook Up了。

【 在 altay(gogogo amelica!) 的大作中提到: 】
: 喷的太没水平,前面说的对,八成是转行的
: 你要吐槽GIL之类还有的一说
[在 Nisayer (si fata sinata) 的大作中提到:]
: :简单的说, 就是一坨屎
: :甚至不如Perl
g
geneontology
17 楼
我用python写了个自动点bing reward的,升级了selenium包,代码也需要重新改。
s
saturnV
18 楼
Python 比Perl 强海里去了,至少有很高的可读性,什么缩进啥的习惯了根本不是个事情,高质量的C++代码也要比较规范的缩进。

【 在 eviking (eviking) 的大作中提到: 】
: Perl语法也奇葩..........我不喜欢Perl和Python。
: 大家都是老实人,规规矩矩地说人话不行吗,非得弄出那么多稀奇古怪的写法来。
s
saturnV
19 楼
Python总的来说是一种非常成功的语言,继承了C++和JAVA的主体语法但是更简洁, 他
在它主业方面都干得很好,现在大家指责的实际上是它原来没打算干的事情,等于骂百米冠军不能跑长跑。Python最大的问题其实还是没有静态类型。所以想规范的地方规范不起来,想快的地方快不起来。Python 现在在改,但是包袱太重,估计很难改好了。
下一代牛逼语言应该继承PYTHON 类似的语法,但是天生支撑静态类型和多线程,本来
GO是有希望的,可是GO 的语法太坑爹,为啥要类型后置?
a
a9
20 楼
语言能不能流行完全看能不能傍上大腿。

【 在 saturnV (土星五号) 的大作中提到: 】
: 标 题: Re: 必须喷一下python
: 发信站: BBS 未名空间站 (Tue Aug 1 12:20:42 2017, 美东)
:
: Python总的来说是一种非常成功的语言,继承了C++和JAVA的主体语法但是更简洁, 他
: 在它主业方面都干得很好,现在大家指责的实际上是它原来没打算干的事情,等于骂百
: 米冠军不能跑长跑。Python最大的问题其实还是没有静态类型。所以想规范的地方规范
: 不起来,想快的地方快不起来。Python 现在在改,但是包袱太重,估计很难改好了。
: 下一代牛逼语言应该继承PYTHON 类似的语法,但是天生支撑静态类型和多线程,本来
: GO是有希望的,可是GO 的语法太坑爹,为啥要类型后置?
: --
d
dracodoc
21 楼
这喷的槽点太多简直无从说起

只说一点

visual age for java挺好用的,跟同时期的jbuilder, vj++, netbeans比有其独特之
处,我很喜欢
它的gui设计界面很好用

vaj先是用smalltalk,然后用java写,短期改名叫websphere workbench,然后开源成
eclipse,目的就是要打倒sun(日蚀)。当时intelliJ IDEA还没有特别火,netbeans
也免费,后来也做的不错。eclipse是靠整个生态系统超过netbeans的,而且ibm搞swt
,性能和效果都比swing强,可惜后续没发展。

我当年在ibm developerworks 中文版上靠这个主题骗了一些稿费的。

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
c
convergence
22 楼
ibm的一个ide,是基于eclipse的,使用感受和eclipse几乎一样。ibm在往上卖这个产品,还挺贵的:
https://www.ibm.com/ms-en/marketplace/rational-developer-for-i

IBM Rational Developer for i

【 在 dracodoc (david) 的大作中提到: 】
: 这喷的槽点太多简直无从说起
: 只说一点
: visual age for java挺好用的,跟同时期的jbuilder, vj++, netbeans比有其独特之
: 处,我很喜欢
: 它的gui设计界面很好用
: vaj先是用smalltalk,然后用java写,短期改名叫websphere workbench,然后开源成
: eclipse,目的就是要打倒sun(日蚀)。当时intelliJ IDEA还没有特别火,
netbeans
: 也免费,后来也做的不错。eclipse是靠整个生态系统超过netbeans的,而且ibm搞
swt
: ,性能和效果都比swing强,可惜后续没发展。
: 我当年在ibm developerworks 中文版上靠这个主题骗了一些稿费的。
x
xyz14
23 楼
没错,类型真是非常重要。

【 在 saturnV (土星五号) 的大作中提到: 】
: Python总的来说是一种非常成功的语言,继承了C++和JAVA的主体语法但是更简洁, 他
: 在它主业方面都干得很好,现在大家指责的实际上是它原来没打算干的事情,等于骂百
: 米冠军不能跑长跑。Python最大的问题其实还是没有静态类型。所以想规范的地方规范
: 不起来,想快的地方快不起来。Python 现在在改,但是包袱太重,估计很难改好了。
: 下一代牛逼语言应该继承PYTHON 类似的语法,但是天生支撑静态类型和多线程,本来
: GO是有希望的,可是GO 的语法太坑爹,为啥要类型后置?
v
verdelite
24 楼
python2到3转换的时候应该加入类型的。
【 在 xyz14 (xyz14) 的大作中提到: 】
没错,类型真是非常重要。
L
Liber8
25 楼
python 没有 end 标志
如果缩进不小心改了 程序也能跑 很难发现这种bug
我现在基本都写 #end

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
L
Liber8
26 楼
C++ 有{} 编辑器比如visual studio 自动帮你搞好缩进

【 在 saturnV (土星五号) 的大作中提到: 】
: Python 比Perl 强海里去了,至少有很高的可读性,什么缩进啥的习惯了根本不是个事
: 情,高质量的C++代码也要比较规范的缩进。
c
convergence
27 楼
对。很难理解有的人只用imac, vim.

【 在 Liber8 (Space-Time continuum) 的大作中提到: 】
: C++ 有{} 编辑器比如visual studio 自动帮你搞好缩进
v
verdelite
28 楼
既然要搞好缩进说明{}是多余的。python俭省掉这个多余的东西有利于阅读。python最大的问题是类型,不是缩进。
【 在 Liber8 (Space-Time continuum) 的大作中提到: 】
C++ 有{} 编辑器比如visual studio 自动帮你搞好缩进
d
didadida
29 楼
R和matlab的语法都比Python正规很多

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
x
xyliu
30 楼
R? R?! Seriously?

【 在 didadida(滴滴嗒嗒) 的大作中提到: 】

: R和matlab的语法都比Python正规很多
b
bravesalmon
31 楼
use julia, it solves all your problems.

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 简单的说, 就是一坨屎
: 甚至不如Perl
: 最近在做一个小的股票分析系统, 图方便,上了python, 原来也用过,只用来写数值
: 程序,用的库少,没啥感觉
: 折腾了一段发现的缺点
: 1. python 2 和 3, 一个语言,版本搞的如此奇葩,真的罕见, 当然现在新语言都有
: 这奇葩趋势, 包括苹果的 swift,带来的问题最大的就是库,准备搭程序架子了,发现
: A库 2 不用能, B库 3 不能用
: 2. 语法, 格式, 其实这个跟第一个缺点是相关的, 之所以重起炉灶搞3, 就是因为
: 在2里某些语法从根本上设计错了, 但3其实问题还是一大堆, 奇葩语法, 至于强制
: ...................
v
verdelite
32 楼
他肯定不了解R。R返回一个matrix,如果是1XN或者Nx1的matrix,自动变成vector。如果是1x1,自动变成个变量。写程序的时候要给它搞死,所以我后来都不用R写程序。
【 在 xyliu (一天到晚喝水的鱼) 的大作中提到: 】
R? R?! Seriously?

R和matlab的语法都比Python正规很多
b
benbob
33 楼
matlab? matlab?! Seriously?

说说 isstr('a'), isstr(['a' 'b']), isstr(['a'; 'b']), isvector('a'),
ismatrix('a') 那个返回true?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: R和matlab的语法都比Python正规很多
b
benbob
34 楼
人家辩解说这都是SPlus的锅, 为了兼容性才这样的。你应该自己用drop=False,
check.names=False等参数避免这些情况。

【 在 verdelite (石头) 的大作中提到: 】
: 他肯定不了解R。R返回一个matrix,如果是1XN或者Nx1的matrix,自动变成vector。如
: 果是1x1,自动变成个变量。写程序的时候要给它搞死,所以我后来都不用R写程序。
a
az2008
35 楼
不能用multi-thread就用multi-process. 再不济直接上celery。

【 在 xyliu (一天到晚喝水的鱼) 的大作中提到: 】
: GIL +1
: 大部分人开始时碰不到GIL。等碰上时已经Hook Up了。
: [在 Nisayer (si fata sinata) 的大作中提到:]
n
nchip
36 楼
应该是说反话吧,哈哈

【 在 xyliu (一天到晚喝水的鱼) 的大作中提到: 】
: R? R?! Seriously?
:
: R和matlab的语法都比Python正规很多
:
T
Testimone
37 楼
python也好R也好在data science这个领域火起来主要还是因为简单。有个idea几十行
code就能实现,你真的要做一个application的话当然还是要上C/C++或者上java. 你非要拿python和R去干本来就不是他们干的事然后来喷这语言怎么做不了这做不了那,对啊,本来就做不到啊.
g
guvest
38 楼
再容易用的语言,也
不要随便深入学,深入用。
大脑和肌肉一样的。有记忆。

Python这种2页cheat sheet 覆盖不了的知识,
我觉得应该尽可能看都不要看。不然,钻研深了
那这就好比练了一辈子中距离跳投,忽然人家都是投三分的
了。
那就拿不到高工资了。金州勇士队的利文斯顿不值钱啊。

【 在 Testimone() 的大作中提到: 】
<br>: python也好R也好在data science这个领域火起来主要还是因为简单。有
个idea
几十行
<br>: code就能实现,你真的要做一个application的话当然还是要上C/C 或者上java
. 你非
<br>: 要拿python和R去干本来就不是他们干的事然后来喷这语言怎么做不了这
做不了
那,对啊
<br>: ,本来就做不到啊.
<br>
N
Nisayer
39 楼
你们这些人是真不懂假不懂

R是类 lisp的语法 ,虽然统计那帮人把R实现的很烂,但是至少在语法正确上,比
python强的多
N
Nisayer
40 楼
【 在 Testimone () 的大作中提到: 】
: python也好R也好在data science这个领域火起来主要还是因为简单。有个idea几十行
: code就能实现,你真的要做一个application的话当然还是要上C/C++或者上java. 你非
: 要拿python和R去干本来就不是他们干的事然后来喷这语言怎么做不了这做不了那,对啊
: ,本来就做不到啊.

这个。。。

你要不要去看看python 社区怎么说的

人可是说了, 百万行代码的程序, 亿次访问的站点,上python没问题
N
Nisayer
41 楼
【 在 bravesalmon (zzz) 的大作中提到: 】
: use julia, it solves all your problems.

我还真试了一下, 比python的确强很多

就是目前版本太低,还没稳定, 要是能有接近1.0就好了
m
minquan
42 楼
居然有人吹R规范!!!

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 你们这些人是真不懂假不懂
: R是类 lisp的语法 ,虽然统计那帮人把R实现的很烂,但是至少在语法正确上,比
: python强的多
v
verdelite
43 楼
你说得太对了。我在波马圣经里写了,人的大脑是有限的,不要随便往里面塞东西。你们说的那些新的语言,我是看都不看的。就算是python,里面那些不常用的特性,我也是不看的。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
再容易用的语言,也
不要随便深入学,深入用。
大脑和肌肉一样的。有记忆。
Python这种2页cheat sheet 覆盖不了的知识,
我觉得应该尽可能看都不要看。不然,钻研深了
那这就好比练了一辈子中距离跳投,忽然人家都是投三分的
了。
那就拿不到高工资了。金州勇士队的利文斯顿不值钱啊。

python也好R也好在data science这个领域火起来主要还是因为简单。有
个idea
...................
d
didadida
44 楼
属实。我说R比Python规范,说的是官方的东西,不是那些二把刀统计系的写的package

Python 3不兼容Python 2,要安装就不得不安装两个,这说明这个语言存在重大的设计问题

还有靠缩进来控制逻辑结构,还有比这个更奇葩的吗?

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: 你们这些人是真不懂假不懂
: R是类 lisp的语法 ,虽然统计那帮人把R实现的很烂,但是至少在语法正确上,比
: python强的多

m
minquan
45 楼
因为你笨到用不到不规范的地方

最简单的,apply只能对一个参数进行变分,而且这个参数还必须是函数的第一个参数
我想列出一个二元函数在一个长方形点阵上的值,你用R写写看?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 属实。我说R比Python规范,说的是官方的东西,不是那些二把刀统计系的写的
package
: Python 3不兼容Python 2,要安装就不得不安装两个,这说明这个语言存在重大的设计
: 问题
: 还有靠缩进来控制逻辑结构,还有比这个更奇葩的吗?
d
dracodoc
46 楼
不清楚你的问题是什么。你是说有一个长方形点阵,一个二元函数参数是x,y然后对每
个点求这个函数?

如果函数本身不是vectorized,一次只能对单个xy求值,写个for loop就是了
如果函数是vectorized,那你把点阵转成一维的,弄出x,y两个vector给函数,把结果再弄成原来形状不就行了。

执着apply干嘛,apply就是syntax sugar,apply和vectorized毫无关系,不是你用
apply就速度快乐。for loop用的正确不会有性能差异。

真正所谓vectorize的性能差异,来自底层的C实现能直接处理vector输入。

我几乎从来不用apply,lapply倒是常用,那是为了避免自己手工初始化list。

【 在 minquan (三民主义) 的大作中提到: 】
: 因为你笨到用不到不规范的地方
: 最简单的,apply只能对一个参数进行变分,而且这个参数还必须是函数的第一个参数
: 我想列出一个二元函数在一个长方形点阵上的值,你用R写写看?
: package
d
didadida
47 楼
【 在 minquan (三民主义) 的大作中提到: 】
: 因为你笨到用不到不规范的地方

从你的这个简单问题看,你脑子真的很不怎么样,你中文系的吧?半路出家写程序。
就你还有脸张口就说别人笨

你代表了一类不适合编程的人,这类人执拗于一些黑箱子,反正简单:给个输入,黑箱子给个输出。但是黑箱子总归有应用的局限。当别人给的黑箱子无法很直接地解决某个问题时,你这种人不是去自己写个高效率的黑箱子(从你描述的问题看,写一个很
容易吧
,当然对笨人来说未必),或者绕个道做个变换来用已有的黑箱子,而是骂黑箱子。

: 最简单的,apply只能对一个参数进行变分,而且这个参数还必须是函数的第一个参数
: 我想列出一个二元函数在一个长方形点阵上的值,你用R写写看?
: package
m
magliner
48 楼
你讨论的很好。 我一看到apply顿时眼冒金星,大脑一片空白 。
你说的这个什么参数,说的也很好。 我发现R的很多函数,我看她的文档,总会有一个参数是一大串省略号,完全不知道表示什意思。 比如一个简单的排序操作。 其文档如下:

sort(x, decreasing = FALSE, ...)

...
arguments to be passed to or from methods or (for the default methods and
objects without a class) to sort.int

哪位大神讲讲 这写的什么意思 ??
【 在 minquan (三民主义) 的大作中提到: 】
: 因为你笨到用不到不规范的地方
: 最简单的,apply只能对一个参数进行变分,而且这个参数还必须是函数的第一个参数
: 我想列出一个二元函数在一个长方形点阵上的值,你用R写写看?
: package
d
dracodoc
49 楼
google 一下很难吗?我发现几乎你的每个问题都是这种,要么上来就搞代码然后搞不
明白,要么上来就读paper然后搞不明白,不能从basic开始吗?遇到问题不能搜索吗?不会搜索,不会自己学习怎么编程?

搜索一下r dot dot dot都有无数文章给你讲解。

r是functional的,函数可以作为其他函数的输入或输出。

sort.int 有很多参数,sort是个generic版,你可以在sort里用sort.int的参数,当处理int的x的时候,method dispatch会先执行sort的代码,然后转给sort.int继续处理
,sort.int的特殊参数被carry过去了。

【 在 magliner (magliner) 的大作中提到: 】
: 你讨论的很好。 我一看到apply顿时眼冒金星,大脑一片空白 。
: 你说的这个什么参数,说的也很好。 我发现R的很多函数,我看她的文档,总会有一个
: 参数是一大串省略号,完全不知道表示什意思。 比如一个简单的排序操作。 其文档如
: 下:
: sort(x, decreasing = FALSE, ...)
: ...
: arguments to be passed to or from methods or (for the default methods and : objects without a class) to sort.int
: 哪位大神讲讲 这写的什么意思 ??
b
benbob
50 楼
那你看看这个?https://www.mitbbs.com/article_t/Statistics/31391451.html

apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)[,1]

没问题, 但

apply(matrix(c(rep(1, 10), rep(1,10)), ncol=4), 1, table)[,1]

就出错。这可都是R的核心函数,不是你所谓的乱七八糟的package 。这个问题讨厌的
地方在于完全一样类型大小的输入数据,有三种可能的结果。其它语言调试时基本是看看输入是什么类型,有什么corner case啥的, R调试不仅要考虑输入,还要考虑输出
有几种类型...
d
didadida
51 楼
这赖不到R上

虽然两个例子里matrix的大小是一样的,但每行列数字分布不一样,有的数字都一样,有的有两种不同数字,再复杂的会有更多不同的。table只管输出频数,人没有义务还
要考虑apply后输出齐整。

换句话说,你这么简单地组合两个函数,是没用对。你没有考虑大多数情况,把问题想简单了---这是很普遍的编程错误,是个编程语言就存在,是人的问题。

另外,我是真不喜欢apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)[,1]
类的语句,要是我,得分成好几步。

你如果就这么写程序,其他语言也一样出问题。

【 在 benbob (benbob) 的大作中提到: 】
: 那你看看这个?https://www.mitbbs.com/article_t/Statistics/31391451.html
: apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)[,1]
: 没问题, 但
: apply(matrix(c(rep(1, 10), rep(1,10)), ncol=4), 1, table)[,1]
: 就出错。这可都是R的核心函数,不是你所谓的乱七八糟的package 。这个问题讨厌的
: 地方在于完全一样类型大小的输入数据,有三种可能的结果。其它语言调试时基本是看
: 看输入是什么类型,有什么corner case啥的, R调试不仅要考虑输入,还要考虑输出
: 有几种类型...
m
minquan
52 楼
还有脸说loop
你知道python对这种问题用list comprehension一行代码就搞定了吗?

再给你来一个
R无法指定编码,导致有中文的R代码经常换个环境就出乱码
这叫规范吗?

又来一个
R把table写csv的时候,如果要把行标和列标都写上
那么第一行应该是行标,然后R就把行标顺序写上,第一行第一个没留空位
V1,V2,V3
1,0,0,0
2,0,0,0
如果Excel存csv,会规范的给第一行第一个留空位
,V1,V2,V3
1,0,0,0
2,0,0,0
这个R的规范性简直是屎好不好?
还有读数据经常自动转成factor类型,本来常用数据接口就一个csv,多少版了都搞不
利索?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 从你的这个简单问题看,你脑子真的很不怎么样,你中文系的吧?半路出家写程序。: 就你还有脸张口就说别人笨
: 你代表了一类不适合编程的人,这类人执拗于一些黑箱子,反正简单:给个输入,黑箱
: 子给个输出。但是黑箱子总归有应用的局限。当别人给的黑箱子无法很直接地解决某个
: 问题时,你这种人不是去自己写个高效率的黑箱子(从你描述的问题看,写一个很
: 容易吧
: ,当然对笨人来说未必),或者绕个道做个变换来用已有的黑箱子,而是骂黑箱子。
d
didadida
53 楼
是不是一行代码就搞定,和程序语言是否规范根本没有关系,很多编程语言没法一行代码搞定,人照样是规范的语言。

Python 2 和 Python 3的那些区别则是根本的(比如3/2=?),如果你认为存在一个编程语言叫Python,那这个编程语言是不规范的,因为用于计算的语言,居然后一个版本并不兼容前一个版本在最简单的计算中的规范。

至于table写csv,你自己去看帮助文件吧,究竟什么参数能得到什么结果,具体到
你给的例子:就是说怎么设参数能跟Excel兼容,人规范得清清楚楚。

【 在 minquan (三民主义) 的大作中提到: 】
: 还有脸说loop
: 你知道python对这种问题用list comprehension一行代码就搞定了吗?
: 再给你来一个
: R无法指定编码,导致有中文的R代码经常换个环境就出乱码
: 这叫规范吗?
: 又来一个
: R把table写csv的时候,如果要把行标和列标都写上
: 那么第一行应该是行标,然后R就把行标顺序写上,第一行第一个没留空位
: V1,V2,V3
: 1,0,0,0
: ...................
b
benbob
54 楼
人家那么写,显然只是为了一句话突出问题。真正的程序应该是

apply(A, 1, table)

你仔细看看,table单独用的时候好好的
> table(c(2, 2, 2, 2))

2
4
> table(c(2, 2, 2, 1))

1 2
1 3
> table(c(2, 3, 2, 1))

1 2 3
1 2 1

但是用在apply上

> apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)
[,1] [,2] [,3] [,4] [,5]
1 2 2 2 2 2
2 2 2 2 2 2

> apply(matrix(c(rep(2, 16), rep(3,4)), ncol=4), 1, table)
[[1]]

2
4

[[2]]

2 3
3 1

[[3]]

2 3
3 1

[[4]]

2 3
3 1

[[5]]

2 3
3 1

> apply(matrix(c(rep(2, 16), rep(2,4)), ncol=4), 1, table)
[1] 4 4 4 4 4

正确的做法是输出以第二种为标准格式,每行给一个频率,因为用户可能需要知道每行有几个不同的数字,究竟是哪几个数字,或者是各个数字的频率。就拿第三种输出来说,平白无故就丢失了每行究竟是什么数字的信息,这种随意丢失table返回信息的事情
算作严整?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 这赖不到R上
: 虽然两个例子里matrix的大小是一样的,但每行列数字分布不一样,有的数字都一样,
: 有的有两种不同数字,再复杂的会有更多不同的。table只管输出频数,人没有义务还
: 要考虑apply后输出齐整。
: 换句话说,你这么简单地组合两个函数,是没用对。你没有考虑大多数情况,把问题想
: 简单了---这是很普遍的编程错误,是个编程语言就存在,是人的问题。
: 另外,我是真不喜欢apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)[
: ,1]
: 类的语句,要是我,得分成好几步。
: 你如果就这么写程序,其他语言也一样出问题。
w
wiseoldowl
55 楼
2017年,3.7都在开发了,还在喷py2和3不兼容。。。
web, ml,quant社区主流都转py3了,市面上的书都是py3,就剩下leetcode刷题的小白
们还在用2
s
saturnV
56 楼
童鞋,语言不是看怎么难用怎么好而是要看有多大用处。 Python就是更高层次的抽象
,作者可以把精力集中在逻辑本身。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 再容易用的语言,也
: 不要随便深入学,深入用。
: 大脑和肌肉一样的。有记忆。
: Python这种2页cheat sheet 覆盖不了的知识,
: 我觉得应该尽可能看都不要看。不然,钻研深了
: 那这就好比练了一辈子中距离跳投,忽然人家都是投三分的
: 了。
: 那就拿不到高工资了。金州勇士队的利文斯顿不值钱啊。
:
: python也好R也好在data science这个领域火起来主要还是因为简单。有
: 个idea
: ...................
m
minquan
57 楼
你给解释一下这两段代码
> ">"(3,5)
[1] FALSE

> f=">"
> f(3,5)
Error in f(3, 5) : 没有"f"这个函数

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 是不是一行代码就搞定,和程序语言是否规范根本没有关系,很多编程语言没法一行代
: 码搞定,人照样是规范的语言。
: Python 2 和 Python 3的那些区别则是根本的(比如3/2=?),如果你认为存在一个编
: 程语言叫Python,那这个编程语言是不规范的,因为用于计算的语言,居然后一个版本
: 并不兼容前一个版本在最简单的计算中的规范。
: 至于table写csv,你自己去看帮助文件吧,究竟什么参数能得到什么结果,具体到
: 你给的例子:就是说怎么设参数能跟Excel兼容,人规范得清清楚楚。
P
PC80286
58 楼
我觉得python 主要是给data scientist用的,然后用来建造prototype.

而且python易学,但是精通其实要花不少时间。所以给很多入手的人错觉。建大一点的project时就体会出来了。难免抱怨。其实这个也很重要。因为项目开始时的判断对项
目开发者挺重要的。要是早知道这么麻烦,就不选python了。

【 在 dracodoc (david) 的大作中提到: 】
: 这喷的槽点太多简直无从说起
: 只说一点
: visual age for java挺好用的,跟同时期的jbuilder, vj++, netbeans比有其独特之
: 处,我很喜欢
: 它的gui设计界面很好用
: vaj先是用smalltalk,然后用java写,短期改名叫websphere workbench,然后开源成
: eclipse,目的就是要打倒sun(日蚀)。当时intelliJ IDEA还没有特别火,
netbeans
: 也免费,后来也做的不错。eclipse是靠整个生态系统超过netbeans的,而且ibm搞
swt
: ,性能和效果都比swing强,可惜后续没发展。
: 我当年在ibm developerworks 中文版上靠这个主题骗了一些稿费的。
P
PC80286
59 楼
说apply不能加快速度,你是用简单函数测试的吧。我老师N年前也是这么交的。apply
主要节省编译时间。函数代码长才有用

【 在 dracodoc (david) 的大作中提到: 】
: 不清楚你的问题是什么。你是说有一个长方形点阵,一个二元函数参数是x,y然后对每
: 个点求这个函数?
: 如果函数本身不是vectorized,一次只能对单个xy求值,写个for loop就是了
: 如果函数是vectorized,那你把点阵转成一维的,弄出x,y两个vector给函数,把结果
: 再弄成原来形状不就行了。
: 执着apply干嘛,apply就是syntax sugar,apply和vectorized毫无关系,不是你用
: apply就速度快乐。for loop用的正确不会有性能差异。
: 真正所谓vectorize的性能差异,来自底层的C实现能直接处理vector输入。
: 我几乎从来不用apply,lapply倒是常用,那是为了避免自己手工初始化list。
c
convergence
60 楼
start-up选python,是为了快点写完代码,毕竟刚开始,谁也不知道这个代码能赚多少
钱,能活几年。后来,如果能搞到大的投资,项目做大了,就发现python不好用了,要用java.但是,代码已经写了那么多了,再改java已经来不及了。

【 在 PC80286 (老掉牙的CPU) 的大作中提到: 】
: 我觉得python 主要是给data scientist用的,然后用来建造prototype.
: 而且python易学,但是精通其实要花不少时间。所以给很多入手的人错觉。建大一点的
: project时就体会出来了。难免抱怨。其实这个也很重要。因为项目开始时的判断对项
: 目开发者挺重要的。要是早知道这么麻烦,就不选python了。
: netbeans
: swt
d
didadida
61 楼
你自己都承认了,单个零件(table function)运行的时候没问题

你把两个零件组合在一起,究竟怎么组合才能运行正确,需要你自己动脑筋,否则要程序员干什么。你组合错了,拿不到结果就赖零件 ---- 还是那句话,你用其他语言,一样会出问题。即便某种语言瞎猫碰死耗子让你这么组合,其他方面你一样出问题。

【 在 benbob (benbob) 的大作中提到: 】
: 人家那么写,显然只是为了一句话突出问题。真正的程序应该是
: apply(A, 1, table)
: 你仔细看看,table单独用的时候好好的
: > table(c(2, 2, 2, 2))
: 2
: 4
: > table(c(2, 2, 2, 1))
: 1 2
: 1 3
: > table(c(2, 3, 2, 1))
: ...................
d
dracodoc
62 楼
table是给人看的,它的输出格式不适合作为其他函数的输入。

【 在 benbob (benbob) 的大作中提到: 】
: 那你看看这个?https://www.mitbbs.com/article_t/Statistics/31391451.html
: apply(matrix(c(rep(1, 10), rep(2,10)), ncol=4), 1, table)[,1]
: 没问题, 但
: apply(matrix(c(rep(1, 10), rep(1,10)), ncol=4), 1, table)[,1]
: 就出错。这可都是R的核心函数,不是你所谓的乱七八糟的package 。这个问题讨厌的
: 地方在于完全一样类型大小的输入数据,有三种可能的结果。其它语言调试时基本是看
: 看输入是什么类型,有什么corner case啥的, R调试不仅要考虑输入,还要考虑输出
: 有几种类型...
d
dracodoc
63 楼
一行代码不算什么,每种语言都有在特定环境下一行代码的时候。
你用某个package也可以一行代码做其他语言许多行的事情。

至于stringasfactor是历史遗留问题,可以设option,然后现在读csv早就不该用base
了,要么用fread,要么用readr,都缺省不转factor。这两个都比base快上10倍左右。

【 在 minquan (三民主义) 的大作中提到: 】
: 还有脸说loop
: 你知道python对这种问题用list comprehension一行代码就搞定了吗?
: 再给你来一个
: R无法指定编码,导致有中文的R代码经常换个环境就出乱码
: 这叫规范吗?
: 又来一个
: R把table写csv的时候,如果要把行标和列标都写上
: 那么第一行应该是行标,然后R就把行标顺序写上,第一行第一个没留空位
: V1,V2,V3
: 1,0,0,0
: ...................
d
dracodoc
64 楼
双引号你弄出来的是个string。对于symbol必须用``。同理如果你要查help,也只能用?`>`而不是?">"。用一点common sense也会知道你那是个string。

> f <->`
> f(3,5)
[1] FALSE

【 在 minquan (三民主义) 的大作中提到: 】
: 你给解释一下这两段代码
: > ">"(3,5)
: [1] FALSE
: > f=">"
: > f(3,5)
: Error in f(3, 5) : 没有"f"这个函数
d
dracodoc
65 楼
怎么节省编译时间?
实际上是减少了function call的数量,在R里function call多了有一定成本。具体要
看代码是什么结构,但一般来说这方面的差异不大(远不如vectorized的差异),除非写的方式不对。

【 在 PC80286 (老掉牙的CPU) 的大作中提到: 】
: 说apply不能加快速度,你是用简单函数测试的吧。我老师N年前也是这么交的。
apply
: 主要节省编译时间。函数代码长才有用
m
minquan
66 楼
> f = '>'
> f(3,5)
Error in f(3, 5) : 没有"f"这个函数

大牛给解释解释?

【 在 dracodoc (david) 的大作中提到: 】
: 双引号你弄出来的是个string。对于symbol必须用``。同理如果你要查help,也只能用
: ?`>`而不是?">"。用一点common sense也会知道你那是个string。
: > f <->`
: > f(3,5)
: [1] FALSE
v
verdelite
67 楼
是tab键上面那个按钮,不是'
【 在 minquan (三民主义) 的大作中提到: 】
> f = '>'
> f(3,5)
Error in f(3, 5) : 没有"f"这个函数
大牛给解释解释?
b
benbob
68 楼
呵呵,好的语言的一个标准就是标准化,这种奇怪的问题越少越好,R就是反面典型。
写程序有点像组装汽车,零件间的配合比零件本身的质量还要重要。Python下这一块那一块,怎么组合一清二楚,搭起来就能用。R下面零件看起来还行,搭起来就是这儿不
对哪儿不对,永远不知哪里会出什么新问题。你也别和我较劲说我不懂R,大家怎么用
这两个语言就是最好的证明,对初学者Python可以轻易写几百行的程序,R基本只能交
互使用。对专业人士Python可以写几百万行的大型程序,R顶天就是大点的库,这就是
语言的局限性造成的。

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 你自己都承认了,单个零件(table function)运行的时候没问题
: 你把两个零件组合在一起,究竟怎么组合才能运行正确,需要你自己动脑筋,否则要程
: 序员干什么。你组合错了,拿不到结果就赖零件 ---- 还是那句话,你用其他语言,一
: 样会出问题。即便某种语言瞎猫碰死耗子让你这么组合,其他方面你一样出问题。
v
verdelite
69 楼
对头。人脑是有限的,不要给它不必要的负担。R不行,到处陷阱。
【 在 benbob (benbob) 的大作中提到: 】
呵呵,好的语言的一个标准就是标准化,这种奇怪的问题越少越好,R就是反面典型。
写程序有点像组装汽车,零件间的配合比零件本身的质量还要重要。Python下这一块那
一块,怎么组合一清二楚,搭起来就能用。R下面零件看起来还行,搭起来就是这儿不
对哪儿不对,永远不知哪里会出什么新问题。你也别和我较劲说我不懂R,大家怎么用
这两个语言就是最好的证明,对初学者Python可以轻易写几百行的程序,R基本只能交
互使用。对专业人士Python可以写几百万行的大型程序,R顶天就是大点的库,这就是
语言的局限性造成的。
m
minquan
70 楼
是这么回事
我启发了他们老半天

函数名作变量这种“函数式编程”的东西(R是所谓的函数式)在R里面碰到不等式就瞎眼

'>'(3,5)能判断出FALSE

而只要把'>'函数换个变量名
f = '>'
就认不出这个比大小的函数了
f(3,5)
错误:f不是函数

这tmd编起程来谁不急啊!
本来逻辑设计的好好的,R就在这里留了个坑!

【 在 benbob (benbob) 的大作中提到: 】
: 呵呵,好的语言的一个标准就是标准化,这种奇怪的问题越少越好,R就是反面典型。
: 写程序有点像组装汽车,零件间的配合比零件本身的质量还要重要。Python下这一块那
: 一块,怎么组合一清二楚,搭起来就能用。R下面零件看起来还行,搭起来就是这儿不
: 对哪儿不对,永远不知哪里会出什么新问题。你也别和我较劲说我不懂R,大家怎么用
: 这两个语言就是最好的证明,对初学者Python可以轻易写几百行的程序,R基本只能交
: 互使用。对专业人士Python可以写几百万行的大型程序,R顶天就是大点的库,这就是
: 语言的局限性造成的。
d
dracodoc
71 楼
前面不是告诉你了, 必须用` 而不是", ">"在哪个语言里都是字符串

">"()能用和R parse表达式的方式有关,不代表>是">"

我还以为讲的足够清楚了,你还在宣称胜利,号称启发别人。

【 在 minquan (三民主义) 的大作中提到: 】
: 是这么回事
: 我启发了他们老半天
: 函数名作变量这种“函数式编程”的东西(R是所谓的函数式)在R里面碰到不等式就瞎眼
: '>'(3,5)能判断出FALSE
: 而只要把'>'函数换个变量名
: f = '>'
: 就认不出这个比大小的函数了
: f(3,5)
: 错误:f不是函数
: 这tmd编起程来谁不急啊!
: ...................
d
didadida
72 楼
零件之间的配合是靠程序员。程序员根据现成的函数,写一些代码拼装起来。

再说一遍,table函数是显示用的,而且本来就不是R语言的核心,其他语言多数也没有这么个函数。你不满意table,完全可以自己写一个函数满足自己的需要。

根据table和apply的功能,可以推出你那种组合是不对的,这本身说明R是规范的---并没有得出和理论不一致的结果。要达到你要的,你要么自己重新写table函数,要么接
受table函数,但是写一些根据各行/列不同数值个数,格式化输出的代码。你不写那些代码,仅仅把table和apply简单组合,得出错误的结果,赖不到R上,只能说明你的水
平不行。而你还拿着这个到论坛上炫耀,说明你连基本的编程思路都没有。

【 在 benbob (benbob) 的大作中提到: 】
: 呵呵,好的语言的一个标准就是标准化,这种奇怪的问题越少越好,R就是反面典型。
: 写程序有点像组装汽车,零件间的配合比零件本身的质量还要重要。Python下这一块那
: 一块,怎么组合一清二楚,搭起来就能用。R下面零件看起来还行,搭起来就是这儿不
: 对哪儿不对,永远不知哪里会出什么新问题。你也别和我较劲说我不懂R,大家怎么用
: 这两个语言就是最好的证明,对初学者Python可以轻易写几百行的程序,R基本只能交
: 互使用。对专业人士Python可以写几百万行的大型程序,R顶天就是大点的库,这就是
: 语言的局限性造成的。
d
dracodoc
73 楼
规模大了以后python很难维护的说法听过一些,几百万行的大型程序还没听说过

R有无数的库,很多时候代码都不长,你用代码行数比那的确不会太多。

一般来说R的限制还是在性能上的。R的专业人士写R没有什么问题,别拿R新手写的程序说事。R新手多,其实说明上手快,应用范围广。

【 在 benbob (benbob) 的大作中提到: 】
: 呵呵,好的语言的一个标准就是标准化,这种奇怪的问题越少越好,R就是反面典型。
: 写程序有点像组装汽车,零件间的配合比零件本身的质量还要重要。Python下这一块那
: 一块,怎么组合一清二楚,搭起来就能用。R下面零件看起来还行,搭起来就是这儿不
: 对哪儿不对,永远不知哪里会出什么新问题。你也别和我较劲说我不懂R,大家怎么用
: 这两个语言就是最好的证明,对初学者Python可以轻易写几百行的程序,R基本只能交
: 互使用。对专业人士Python可以写几百万行的大型程序,R顶天就是大点的库,这就是
: 语言的局限性造成的。
b
benbob
74 楼
真服了你了,有问题就是用户问题,或者不是语言核心。这个例子有问题的明显是
apply,不是table,table在各种情况下都运行正确,返回同样的类型,是apply莫名其妙把table的返回信息重组甚至丢掉了,要重写也只能重写apply,而不是table。至于
你的人身攻击,如果说水平高就是深入了解R的各个坑或者有足够的耐心填坑,我就直
接呵呵了。

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 零件之间的配合是靠程序员。程序员根据现成的函数,写一些代码拼装起来。
: 再说一遍,table函数是显示用的,而且本来就不是R语言的核心,其他语言多数也没有
: 这么个函数。你不满意table,完全可以自己写一个函数满足自己的需要。
: 根据table和apply的功能,可以推出你那种组合是不对的,这本身说明R是规范的---并
: 没有得出和理论不一致的结果。要达到你要的,你要么自己重新写table函数,要么接
: 受table函数,但是写一些根据各行/列不同数值个数,格式化输出的代码。你不写那些
: 代码,仅仅把table和apply简单组合,得出错误的结果,赖不到R上,只能说明你的水
: 平不行。而你还拿着这个到论坛上炫耀,说明你连基本的编程思路都没有。
b
benbob
75 楼
"R有无数的库,很多时候代码都不长"直接就说明了R在接口严谨性方面的欠缺。几百几千行的程序花大力气内部可以基本没问题,但搞通用接口处理各种不同大小类型数据让各个部件一起工作就不可靠。

【 在 dracodoc (david) 的大作中提到: 】
: 规模大了以后python很难维护的说法听过一些,几百万行的大型程序还没听说过
: R有无数的库,很多时候代码都不长,你用代码行数比那的确不会太多。
: 一般来说R的限制还是在性能上的。R的专业人士写R没有什么问题,别拿R新手写的程序
: 说事。R新手多,其实说明上手快,应用范围广。
d
didadida
76 楼
你这是典型的拉不出屎来赖马桶。

要想始终得到list,有很多方法。比如用lapply

> m <- matrix="" c="" rep="" 1="" 10="" rep="" 2="" 10="" ncol="4)<br">+ v <- split="" m="" row="" m="">+ lapply(v, table)
$`1`

1 2
2 2

$`2`

1 2
2 2

$`3`

1 2
2 2

$`4`

1 2
2 2

$`5`

1 2
2 2

> m <- matrix="" c="" rep="" 2="" 16="" rep="" 3="" 4="" ncol="4)<br">+ v <- split="" m="" row="" m="">+ lapply(v, table)
$`1`

2
4

$`2`

2 3
3 1

$`3`

2 3
3 1

$`4`

2 3
3 1

$`5`

2 3
3 1

> m <- matrix="" c="" rep="" 2="" 16="" rep="" 2="" 4="" ncol="4)<br">+ v <- split="" m="" row="" m="">+ lapply(v, table)
$`1`

2
4

$`2`

2
4

$`3`

2
4

$`4`

2
4

$`5`

2
4

>

【 在 benbob (benbob) 的大作中提到: 】
: 人家那么写,显然只是为了一句话突出问题。真正的程序应该是
: apply(A, 1, table)
: 你仔细看看,table单独用的时候好好的
: > table(c(2, 2, 2, 2))
: 2
: 4
: > table(c(2, 2, 2, 1))
: 1 2
: 1 3
: > table(c(2, 3, 2, 1))
: ...................
d
didadida
77 楼
我刚才已经说的很清楚了,阅读apply和table两个函数的帮助文件后,即便不用实际运行,也能知道你那么组合得不到你想要的结果。所以从你的例子看,那两个函数没有问题,任何函数都有一个边界,你非要越过那个边界。

如果没有其他办法来实现你要得到的,那你可以赖R。实际并非如此,稍微变化一下,
就能总是得到list。

还是那句话,程序员还是应该有点稍微的智商,不是阿猫阿狗都能当程序员的。

【 在 benbob (benbob) 的大作中提到: 】
: 真服了你了,有问题就是用户问题,或者不是语言核心。这个例子有问题的明显是
: apply,不是table,table在各种情况下都运行正确,返回同样的类型,是apply莫名其
: 妙把table的返回信息重组甚至丢掉了,要重写也只能重写apply,而不是table。至于
: 你的人身攻击,如果说水平高就是深入了解R的各个坑或者有足够的耐心填坑,我就直
: 接呵呵了。
m
minquan
78 楼
再说一遍,用了'照样不解决问题

> '>'(5,2)
[1] TRUE
> f = '>'
> f(5,2)
Error in f(5, 2) : 没有"f"这个函数

看懂了没有?

【 在 dracodoc (david) 的大作中提到: 】
: 前面不是告诉你了, 必须用` 而不是", ">"在哪个语言里都是字符串
: ">"()能用和R parse表达式的方式有关,不代表>是">"
: 我还以为讲的足够清楚了,你还在宣称胜利,号称启发别人。
m
minquan
79 楼
不懂再给你来一个执行正常的例子

> sqrt(5)
[1] 2.236068
> g = sqrt
> g(5)
[1] 2.236068

【 在 dracodoc (david) 的大作中提到: 】
: 前面不是告诉你了, 必须用` 而不是", ">"在哪个语言里都是字符串
: ">"()能用和R parse表达式的方式有关,不代表>是">"
: 我还以为讲的足够清楚了,你还在宣称胜利,号称启发别人。
m
minquan
80 楼
智商帝,你说说'>'当函数名来用的这个坑怎么填吧?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 我刚才已经说的很清楚了,阅读apply和table两个函数的帮助文件后,即便不用实际运
: 行,也能知道你那么组合得不到你想要的结果。所以从你的例子看,那两个函数没有问
: 题,任何函数都有一个边界,你非要越过那个边界。
: 如果没有其他办法来实现你要得到的,那你可以赖R。实际并非如此,稍微变化一下,
: 就能总是得到list。
: 还是那句话,程序员还是应该有点稍微的智商,不是阿猫阿狗都能当程序员的。
d
dracodoc
81 楼
前面已经有人告诉过你一遍了,要用tab上面那个符号,不是单引号。我告诉你双引号
是定义字符串的,你换成单引号不还是字符串吗?

> f <->`
> f(5,2)
[1] TRUE

我实在是不知道你看懂了没有。

【 在 minquan (三民主义) 的大作中提到: 】
: 再说一遍,用了'照样不解决问题
: > '>'(5,2)
: [1] TRUE
: > f = '>'
: > f(5,2)
: Error in f(5, 2) : 没有"f"这个函数
: 看懂了没有?
s
stid
82 楼
连字符都分不清楚,还当程序员

【 在 dracodoc (david) 的大作中提到: 】
: 前面已经有人告诉过你一遍了,要用tab上面那个符号,不是单引号。我告诉你双引号
: 是定义字符串的,你换成单引号不还是字符串吗?
: [1] TRUE
: 我实在是不知道你看懂了没有。
m
minquan
83 楼
厉害!

【 在 dracodoc (david) 的大作中提到: 】
: 前面已经有人告诉过你一遍了,要用tab上面那个符号,不是单引号。我告诉你双引号
: 是定义字符串的,你换成单引号不还是字符串吗?
: > f <->`
: > f(5,2)
: [1] TRUE
: 我实在是不知道你看懂了没有。
m
minquan
84 楼
但是如果按照你的说法
> ">"(3,2)
[1] TRUE
> '>'(3,2)
[1] TRUE

这两个就不应该能运行
这就是R不规范的地方
一种定义方法在某些情境下可行,在某些情景下不可行,这就是坑,你承不承认?

【 在 dracodoc (david) 的大作中提到: 】
: 前面已经有人告诉过你一遍了,要用tab上面那个符号,不是单引号。我告诉你双引号
: 是定义字符串的,你换成单引号不还是字符串吗?
: > f <->`
: > f(5,2)
: [1] TRUE
: 我实在是不知道你看懂了没有。
d
dracodoc
85 楼
谁会有这种用法?你能找到这么用的理由吗?
具体这么用会有这个结果是R具体实现的选择,我不清楚具体原因,但是R里是经常可以把程序当数据,在代码中操作和调整表达式的,这是lisp传统。

所谓不规范只是你自己定义的而已,找个犄角旮旯的情景要求规范,实际上没有哪个语言有多规范,每个语言都有坑,无非你习惯一些不当是坑,或者你不知道而已。你对“规范语言”的梦想更多是出于不了解的崇拜。

【 在 minquan (三民主义) 的大作中提到: 】
: 但是如果按照你的说法
: > ">"(3,2)
: [1] TRUE
: > '>'(3,2)
: [1] TRUE
: 这两个就不应该能运行
: 这就是R不规范的地方
: 一种定义方法在某些情境下可行,在某些情景下不可行,这就是坑,你承不承认?
m
magliner
86 楼
这么简单的事情看你们扯了这么多,直接说这是backtick或者grave_accent不就行了 ?https://en.wikipedia.org/wiki/Grave_accent
m
minquan
87 楼
他不会这么说。

【 在 magliner (magliner) 的大作中提到: 】
: 这么简单的事情看你们扯了这么多,直接说这是backtick或者grave_accent不就行了 ?
: https://en.wikipedia.org/wiki/Grave_accent
d
dracodoc
88 楼
前面两个人三次告诉你怎么回事,你继续宣称自己正确,承认错误之后,现在又找到一点理由了?

是不是心里感觉好受一点?

【 在 minquan (三民主义) 的大作中提到: 】
: 他不会这么说。
: ?
m
minquan
89 楼
我并不承认这是自己的错误,因为我在一本教材上就看到了用""来搞。而且试验了也是管用的,只是在函数名替换时出错。R的不规范性已经误导了编写教材的人,还不严重?

R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量名以数字开头,就会直接报错。R这种在某些情境下管用,但是在另一些情景但是同样
的意义就不管用的语法就叫不规范。(通用的是['']方法)

这就像英语的动词过去式,不能普遍加"ed"来表示,而有各种特例。R就是像英语一样
的,经验性的,充满各种特例的语言。这种语言你问任何一个学外语的专家,都会说是不规范的,如英语就是最不规范的西方语言。

本贴的议题是Python是不是不规范,子议题是R有没有比Python更规范,而我们说的这
些例子已经充分证明了R的不规范。至于你给出了解决方案,十分感谢。但这不构成对R规范的证明,谢谢。

【 在 dracodoc (david) 的大作中提到: 】
: 前面两个人三次告诉你怎么回事,你继续宣称自己正确,承认错误之后,现在又找到一
: 点理由了?
: 是不是心里感觉好受一点?
d
didadida
90 楼
你的这篇帖子尤其是----下边的那句可以转joke了

你肯定不是理工科出身的

----------------------
R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量名以数字开头,就会直接报错

【 在 minquan (三民主义) 的大作中提到: 】
: 我并不承认这是自己的错误,因为我在一本教材上就看到了用""来搞。而且试验了也是
: 管用的,只是在函数名替换时出错。R的不规范性已经误导了编写教材的人,还不严
重?
: R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量
: 名以数字开头,就会直接报错。R这种在某些情境下管用,但是在另一些情景但是同样
: 的意义就不管用的语法就叫不规范。(通用的是['']方法)
: 这就像英语的动词过去式,不能普遍加"ed"来表示,而有各种特例。R就是像英语一样
: 的,经验性的,充满各种特例的语言。这种语言你问任何一个学外语的专家,都会说是
: 不规范的,如英语就是最不规范的西方语言。
: 本贴的议题是Python是不是不规范,子议题是R有没有比Python更规范,而我们说的这
: 些例子已经充分证明了R的不规范。至于你给出了解决方案,十分感谢。但这不构成
对R
: ...................
m
minquan
91 楼
呵呵,有事说事,需要我再给你举个例子么?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 你的这篇帖子尤其是----下边的那句可以转joke了
: 你肯定不是理工科出身的
: ----------------------
: R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量
: 名以数字开头,就会直接报错
: 重?
: 对R
d
didadida
92 楼
比如:你举几个变量名能够以数字开头的编程语言

【 在 minquan (三民主义) 的大作中提到: 】
: 呵呵,有事说事,需要我再给你举个例子么?
m
minquan
93 楼
我说的是data.frame的col.name,当然,R直接改成name,这么说是为了顺应R的规则

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 比如:你举几个变量名能够以数字开头的编程语言
d
dracodoc
94 楼
把教材贴出来看看,看看是什么权威教材。

你的第二个例子跟第一个错误一样,最基本的概念不清楚。

1.从csv转成data frame的时候,R会检查列名,转换成符合R规范的名字,可以有数字
开头,还会把"A B" 转成 A.B,但这不是必须的。
2.有空格,有数字等情况下直接写会和其他情况无法区分,所以必须用``括起来,跟上一个例子是一样的。用rstudio的时候按tab人家都会给你自动括起来。
3.同理,如果要查一个符号的帮助,你必须用?`<- 而不可能用="">4.如果在列名里用变量,需要用[[]]格式而不是$,因为需要把变量evaluate而不是当
成literal

如果了解一点语言实现,就知道这些区别都是必须的。你要不造成歧义就必须想办法区分,只不过人家选择的区分方式和你想象的不一样而已,而你想象的“规范”方式很多时候根本不存在或者是错误的,比如非要用字符串当函数名直接用,任何一种语言也不可能有这种用法。

不过反正你是不会承认自己错的,我也是白费功夫。

修正一下,数字开头或者有空格也可以做变量名,但必须用``括起来使用

【 在 minquan (三民主义) 的大作中提到: 】
: 我并不承认这是自己的错误,因为我在一本教材上就看到了用""来搞。而且试验了也是
: 管用的,只是在函数名替换时出错。R的不规范性已经误导了编写教材的人,还不严
重?
: R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量
: 名以数字开头,就会直接报错。R这种在某些情境下管用,但是在另一些情景但是同样
: 的意义就不管用的语法就叫不规范。(通用的是['']方法)
: 这就像英语的动词过去式,不能普遍加"ed"来表示,而有各种特例。R就是像英语一样
: 的,经验性的,充满各种特例的语言。这种语言你问任何一个学外语的专家,都会说是
: 不规范的,如英语就是最不规范的西方语言。
: 本贴的议题是Python是不是不规范,子议题是R有没有比Python更规范,而我们说的这
: 些例子已经充分证明了R的不规范。至于你给出了解决方案,十分感谢。但这不构成
对R
: ...................
m
minquan
95 楼
An Introduction to R
W.N.Venables D.M.Smith
and the R core team
2017-03-06

10.2 Defining New Binary Operaters

it could have been used as a binary operator in expressions rather than in
function form. Suppose,
for example, we choose ! for the internal character. The function definition would then start as
> "%!%" <- function="" X="" y="" ...="">(Note the use of quote marks.)

你现在告诉我"%!%"是不是一个字符串?

【 在 dracodoc (david) 的大作中提到: 】
: 把教材贴出来看看,看看是什么权威教材。
: 你的第二个例子跟第一个错误一样,最基本的概念不清楚。name不是变量,是
: dataframe的列名,这和变量不一样。
: 1.从csv转成data frame的时候,R会检查列名,转换成符合R规范的名字,这个规范比
: 变量名的约束少一些,所以可以有数字开头,还会把"A B" 转成 A.B,但这不是必须的。
: 2.有空格,有数字等情况下直接写会和其他情况无法区分,所以必须用``括起来,跟上
: 一个例子是一样的。用rstudio的时候按tab人家都会给你自动括起来。
: 3.同理,如果要查一个符号的帮助,你必须用?`<- 而不可能用="">: 4.如果在列名里用变量,需要用[[]]格式而不是$,因为需要把变量evaluate而不是当
: 成literal
: ...................
m
minquan
96 楼
别扯别的编程语言,R相比正规编程语言,功能多少年以来都是残缺的

R脚本连调用同一个目录下的其它R脚本都做不到——

Python脚本我能做到一个目录下一个主脚本,运行起来调用该目录里的其它脚本,然后随意拷贝挪位置都正常运行,R做得到?

【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 比如:你举几个变量名能够以数字开头的编程语言
d
didadida
97 楼
下边的是不是你的原话?
你说说哪个正规编程语言或者企业级数据库允许变量名以数字开头。
----------
----------------------
R类似的不规范还有很多,例如[dataframe]$[name]这个$符号就不是通用的,如果变量名以数字开头,就会直接报错
【 在 minquan (三民主义) 的大作中提到: 】
别扯别的编程语言,R相比正规编程语言,功能多少年以来都是残缺的
R脚本连调用同一个目录下的其它R脚本都做不到——
Python脚本我能做到一个目录下一个主脚本,运行起来调用该目录里的其它脚本,然后
随意拷贝挪位置都正常运行,R做得到?
a
amo
98 楼
哥这些年各种语言主动被动用了一圈之后发现基本上还是要省心上Java要高效上C/C++
,Perl Python啥的都是坑爹货,尤其坑爹的是这两货都跟赌场庄家一样一开始让你尝
很多甜头,等你忽然发现下体发凉的时候才意识到裤衩已经被丫的赢走了。

【 在 saturnV (土星五号) 的大作中提到: 】
: Python总的来说是一种非常成功的语言,继承了C++和JAVA的主体语法但是更简洁, 他
: 在它主业方面都干得很好,现在大家指责的实际上是它原来没打算干的事情,等于骂百
: 米冠军不能跑长跑。Python最大的问题其实还是没有静态类型。所以想规范的地方规范
: 不起来,想快的地方快不起来。Python 现在在改,但是包袱太重,估计很难改好了。
: 下一代牛逼语言应该继承PYTHON 类似的语法,但是天生支撑静态类型和多线程,本来
: GO是有希望的,可是GO 的语法太坑爹,为啥要类型后置?
d
didadida
99 楼
列名跟变量名有什么本质区别?

任何正规编程语言都不许允许变量名里边数字开头
同理,数据库产品也有类似限制。个别允许数字开头的会在数字前加符号

在列名里以数字开头属于行为艺术

【 在 minquan (三民主义) 的大作中提到: 】
: 我说的是data.frame的col.name,当然,R直接改成name,这么说是为了顺应R的规则
m
minquan
100 楼
python在哪里坑?
网络?线程?

【 在 amo (牛肉炖熊掌) 的大作中提到: 】
: 哥这些年各种语言主动被动用了一圈之后发现基本上还是要省心上Java要高效上C/C++
: ,Perl Python啥的都是坑爹货,尤其坑爹的是这两货都跟赌场庄家一样一开始让你尝
: 很多甜头,等你忽然发现下体发凉的时候才意识到裤衩已经被丫的赢走了。