一个R语言的循环变单行问题 跪求各位大虾出手相助

软件和网站开发以及相关技术探讨
回复
头像
coliuster
帖子: 317
注册时间: 2010-03-29 21:25
来自: 顽强地活在封建的天空下

一个R语言的循环变单行问题 跪求各位大虾出手相助

#1

帖子 coliuster » 2010-08-08 12:07

各位大虾好,
今天在下遇到一个非常棘手的R语言的问题,想请教一下。
我需要比较计算一组声学数据,这组数据个头儿可能有些大,一共是50个,我要计算其中每两个的差异性。也就是说最少需要计算50*49/2次, 而且一次计算需要的时间就很长了,大概十分钟,如果算上两千多次,那简直要等死人。
所以我就编了一个循环,可是据说R最讨厌的就是循环运算了,会导致速度更慢。后来,我有听说perl可以把一个循环搞成很多单行,这样就可以使R的运算时间大大减少,因为无数单行对于R来说要比一个循环快很多。
论坛里的大侠们很多是统计学专业的,所以想请教一下可不可以帮我把这个循环改成所谓的很多单行命令呢?
在下千里迢迢赶来论坛,但求有大虾出手相助,万分感激。

具体的语言过程如下:
> t2<-readWave("t2") #给t2赋值。
> t3<-readWave("t3")
> t5<-readWave("t5") #这里只列出了四个样本,一共有50个。
> a<-c(t2,t3,t5)
> b<-c(t2,t3,t5)
> n<-1
> c<-(1:9)
> c
[1] 1 2 3 4 5 6 7 8 9
> for(i in a){for(j in b){c[n]<-diffwave(i,j,f=44100);n<-n+1}} #这就是在下编的循环,diffwave()就是用来计算两个声音文件差异性的函数,最后结果是一个数值。
> c
[1] 0.00000000 0.09743880 0.08595923 0.09743880 0.00000000 0.02344093 0.08595923
[8] 0.02344093 0.00000000
我想,革命是不朽的。
头像
philbar
帖子: 35
注册时间: 2010-02-17 16:53

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#2

帖子 philbar » 2010-08-19 17:08

不能写一个生成语句的小程序吗?
==
我不懂R,帮不了lz :em20
acekiller
帖子: 3
注册时间: 2010-08-31 13:45

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#3

帖子 acekiller » 2010-09-10 13:28

虽然看到的很晚,对楼主的所说的语言也不太了解,不过还是想问问楼主,你所谓的一次计算要10多分钟是不是太夸张了点哦,如果真是那样的话你还不如自己去寻找其他解决方式,这里想问一下,你说的那个语言循环能多耗多少时间?能节省一半?80%以上?算算需要的时间也长的不得了啊,若真是这样还不如去考虑选择更高处理能力的硬件或者去寻求一个全新的问题解决方案哦。
头像
coliuster
帖子: 317
注册时间: 2010-03-29 21:25
来自: 顽强地活在封建的天空下

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#4

帖子 coliuster » 2010-10-24 12:13

呵呵 是有一些夸张,所以我用了两台超算都以失败告终。最后用apple,i5内核,4cpu,8G memo才搞定的。
循环不可以用,会无限地降低效率,我把这个循环换成了一大堆的平行运算。。。。。
我想,革命是不朽的。
janus
帖子: 156
注册时间: 2006-01-02 3:15

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#5

帖子 janus » 2010-10-24 13:42

不知道用outer函数怎么样

c <- outer(a, a, FUN = "diffwave")
shiweifu
帖子: 66
注册时间: 2007-01-28 15:47

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#6

帖子 shiweifu » 2010-10-28 11:05

R语言?
RUBY?
貌似没这种叫法阿。。
janus
帖子: 156
注册时间: 2006-01-02 3:15

Re: 一个R语言的循环变单行问题 跪求各位大虾出手相助

#7

帖子 janus » 2010-10-28 11:29

shiweifu 写了:R语言?
RUBY?
貌似没这种叫法阿。。
http://www.r-project.org/

R is a language and environment for statistical computing and graphics. It is a GNU project which is similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. R can be considered as a different implementation of S.

R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, ...) and graphical techniques, and is highly extensible. The S language is often the vehicle of choice for research in statistical methodology, and R provides an Open Source route to participation in that activity.

One of R's strengths is the ease with which well-designed publication-quality plots can be produced, including mathematical symbols and formulae where needed. Great care has been taken over the defaults for the minor design choices in graphics, but the user retains full control.
回复