a******6 发帖数: 78 | 1 看书的时候,看到:
loops are efficient in C unlike in R.
请问这是问什么呢?
我想这也是我们需要在R中调用C函数的原因吧?
谢谢 | s*****n 发帖数: 2174 | 2 我觉得不是, 主要是R里面的循环的实现,
比较注重程序的可读性, 而忽略了效率.
C的循环本质上是
for(i=0; i
其循环变量只是一个整型变量i的递加.
R的循环, 本质上是
for(sth in vector)
这里sth可能是整, 浮点, 字符, 等等, vector
本身是一个不具备递加关系的东西, 所以这里
还牵扯着另一个循环, 就是指标变量.
每次循环体结束, 指标变量i++, 然后循环变量
sth <- vector[i]. 这样整体上loop就慢多了,
尤其你写一个多重嵌套循环, 简直慢死.
还有一个原因我觉得不是你说的原因 就是
R里面很多函数, 都有隐含的循环, 但是执行
效率就很高, 比如 sum(vector) 或者tapply.
这些都等价于单层, 甚至多层循环. 只有人为
写出来的显性循环才慢, 说明是R平台对for语句
解释和执行的效率低. | a******6 发帖数: 78 | 3 哦,原来如此,太感谢了
书上确实写了,if these loops can be "vectorized" or written entirely in
matrix operations, then there is no need to convert to the lower level
language. In fact, most matrix operations will be faster in R than if re-
wrriten in C because R uses an optimized version of the BLAS to do matrix
calculations.
只是再具体的细节我就不明白了
【在 s*****n 的大作中提到】 : 我觉得不是, 主要是R里面的循环的实现, : 比较注重程序的可读性, 而忽略了效率. : C的循环本质上是 : for(i=0; i: 其循环变量只是一个整型变量i的递加. : R的循环, 本质上是 : for(sth in vector) : 这里sth可能是整, 浮点, 字符, 等等, vector : 本身是一个不具备递加关系的东西, 所以这里 : 还牵扯着另一个循环, 就是指标变量.
| p******n 发帖数: 874 | 4 R里面尽量用apply系列的函数,比for loop好很多。 | D******n 发帖数: 2836 | 5 R是解释性执行的,C是compile的.
凡是解释执行的语言都要避免loop,尽量vectorize
譬如matlab也是。
但R的循环用起来还真的比一般的解释语言的循环还要慢。
【在 s*****n 的大作中提到】 : 我觉得不是, 主要是R里面的循环的实现, : 比较注重程序的可读性, 而忽略了效率. : C的循环本质上是 : for(i=0; i: 其循环变量只是一个整型变量i的递加. : R的循环, 本质上是 : for(sth in vector) : 这里sth可能是整, 浮点, 字符, 等等, vector : 本身是一个不具备递加关系的东西, 所以这里 : 还牵扯着另一个循环, 就是指标变量.
| a******6 发帖数: 78 | 6 恩,那interpretated 和 compiled 具体有什么区别呢?
为什么在loop和vectorized的时候差别这么大呢?
谢谢
【在 D******n 的大作中提到】 : R是解释性执行的,C是compile的. : 凡是解释执行的语言都要避免loop,尽量vectorize : 譬如matlab也是。 : 但R的循环用起来还真的比一般的解释语言的循环还要慢。
| D******n 发帖数: 2836 | 7 google一下吧。
vectorized 之前是R在搞loop
vectorized 之后是那些function在搞loop,那些function大多是c,fortran之类编译
的。
【在 a******6 的大作中提到】 : 恩,那interpretated 和 compiled 具体有什么区别呢? : 为什么在loop和vectorized的时候差别这么大呢? : 谢谢
| f*******r 发帖数: 257 | 8 that makes total sense. thanks.
【在 D******n 的大作中提到】 : google一下吧。 : vectorized 之前是R在搞loop : vectorized 之后是那些function在搞loop,那些function大多是c,fortran之类编译 : 的。
|
|