由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 问R和C的循环语句
相关主题
问个R里面avoid for loop的问题(sapply,lapply...)提高R速度的一些tips
【欢迎进来讨论】for loop in R如何简化这个程序 in R
R program helpVectorization question
在R里怎么跳到指定的地方?R:如何从vector中挑出单一元素
R matlab SAS谁快?请教R - 关于mean
[SAS] how to do nested loop between 2 datasets?R请教*apply的用法。
有个R问题想请交大家请问如何用 R 产生一些变量
请教一个关于用R来统计循环次数的问题问个sas循环的问题
相关话题的讨论汇总
话题: 循环话题: vectorized话题: loop话题: loops话题: 语句
进入Statistics版参与讨论
1 (共1页)
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之类编译
: 的。

1 (共1页)
进入Statistics版参与讨论
相关主题
问个sas循环的问题R matlab SAS谁快?
如何在用SAS给多个data step 和proc step 做循环语句呢?[SAS] how to do nested loop between 2 datasets?
问个关于在R里面用循环语句的问题有个R问题想请交大家
请教一个关于r的问题。请教一个关于用R来统计循环次数的问题
问个R里面avoid for loop的问题(sapply,lapply...)提高R速度的一些tips
【欢迎进来讨论】for loop in R如何简化这个程序 in R
R program helpVectorization question
在R里怎么跳到指定的地方?R:如何从vector中挑出单一元素
相关话题的讨论汇总
话题: 循环话题: vectorized话题: loop话题: loops话题: 语句