楼主: ReneeBK
3773 3

笨办法学R编程 [推广有奖]

  • 1关注
  • 62粉丝

VIP

已卖:4895份资源

学术权威

14%

还不是VIP/贵宾

-

TA的文库  其他...

R资源总汇

Panel Data Analysis

Experimental Design

威望
1
论坛币
49629 个
通用积分
55.4465
学术水平
370 点
热心指数
273 点
信用等级
335 点
经验
57805 点
帖子
4005
精华
21
在线时间
582 小时
注册时间
2005-5-8
最后登录
2023-11-26

楼主
ReneeBK 发表于 2014-7-23 01:06:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

为了高效学习这些R知识或技巧,我想了一个办法.我发现这个方法的学习效率确实很高。
  • 把这个帖子的代码全部拷贝到一个r_dummy.R文件中(包含注释和背景信息),而不是一次拷贝几条命令.
  • 在rstudio里用Ctrl+R命令随时运行选中部分代码,查看结果.
  • 修改代码,然后再运行查看结果.


#笨办法学R编程

# # 在倚天屠龙记中,有一人唤作火工头陀。此人练功不靠心法,只靠模仿他人招式,由外而内,自成一家。
# 练习编程也有如此的法门,不看文字描述,只观察和模仿别人的代码。
# 这样也可以由外而内学会编程。《笨办法学python》的作者Zed Shaw
# 就说过这种笨办法入门其实更简单。阳志平在他的文章《如何学习一门新的编程语言》
# 中也讲到,初学编程要在学习区刻意的大量练习,少看理论书。
# #
# # TED上一位教育家同样谈到这么一个故事,他把一个计算机扔在一个偏远的
# 印度小村子里不去管它,在那里没有上过学的小孩就能自己学会英语和计算机的用法。
# 实际上人脑是非常善于自我探索和学习的。因此本系列教程的特点就是只有演示代码加少量注释。
# 通过反复模仿和练习,揣摩代码的变化和结果,你就能自行领悟其含义,并打下坚实的编程基础。
# #
# # 本系列每篇文章的目的都是用R语言编程来解决一个Project Euler的问题。
# Project Euler是一系列由易到难的计算机编程挑战,它提供了一个平台来激发我们解决问题的灵感和思路。
# 本人写这个教程的目的有三:一是为了好玩,二是提高编程水平
# ,三是示范说明以提供给需要的R初学者。另外从R-Blogger上了解,
# 已经有两位高人用R在计算Project Euler,各位也可以参照他们的文章(博客1、博客2)。

# http://www.dataguru.cn/article-3392-6.html
#R 学习笔记《一》~《十二》----R语言初学者指南
#本文汇总了varlardoha博客里的R语言初学者指南,里面有许多基础的总结,对初期学习的帮助还不错,有兴趣可看下。

# 预备知识练习,在R控制台逐行输入观察结果
  1. 1:10
  2. 10:1
  3. x <- 1:10
  4. print(x)
  5. sum(x)
  6. x > 5
  7. x[x > 5]
  8. x > 5 & x < 8
  9. x > 8 | x < 3
  10. 10 %% 3
  11. 9 %% 3
  12. x %% 3
  13. x %% 3 == 0
  14. x[x %% 3 == 0]

  15. # Project Euler 1
  16. # 找到1000以下,所有能被3或5整除的数,将它们相加
  17. x <- 1:999
  18. sum(x[x %% 3 == 0 | x %% 5 == 0 ])



  19. # 预备练习,while循环和if判断
  20. x <- 1:10
  21. print(x)
  22. print(x[10])
  23. print(x[-10])

  24. i <- 1
  25. while (i <= 10) {
  26.   print(x)
  27.   i <- i + 1
  28. }
  29. i <- 1
  30. while (TRUE) {
  31.   print(x)
  32.   i <- i + 1
  33.   if (i > 10) break
  34. }
  35. # 用循环和条件来完成前篇文章中的问题
  36. # 可以体会到R语言向量化计算的特点。
  37. x <- 1
  38. sumx <- 0
  39. while (x < 1000) {
  40.   if (x %% 3 == 0 | x %% 5 == 0) {
  41.     sumx <- sumx + x
  42.   }
  43.   x <- x + 1
  44. }
  45. print(sumx)

  46. # Project Euler 2
  47. # 找到4000000以下的斐波纳契数列
  48. # 将其中的偶数进行求和
  49. i <- 2
  50. x <- 1:2
  51. while (x < 4e6) {
  52.   x[i+1] <- x[i-1] + x
  53.   i <- i + 1
  54. }
  55. x <- x[-i]
  56. sum(x[x %% 2 == 0])



  57. # 预备练习,学习for循环、建立自定义函数和其它一些函数

  58. for (n in 1:10) {
  59.   print(sqrt(n))
  60. }

  61. x <- c('hello','world','I','love','R')
  62. for (n in x) {
  63.   print(n)
  64. }

  65. x <- seq(from=1,to=10,by=1)
  66. print(x)
  67. x <- seq(from=1,to=10,by=2)
  68. print(x)
  69. x <- seq(from=1,to=2,length.out=10)
  70. print(x)
  71. round(x)
  72. x > 1.5
  73. all(x>1.5)
  74. any(x>1.5)

  75. # 如何自定义一个求圆面积的函数
  76. myfunc <- function(r) {
  77.   area <- pi*r^2
  78.   return(area)
  79. }
  80. print(myfunc(4))

  81. # 同时求四个不同半径圆的面积
  82. r <- c(2,2,4,3)
  83. sapply(X=r,FUN=myfunc)

  84. # Project Euler 3
  85. # 找到600851475143这个数的最大质因子
  86. # 先建立一个函数以判断某个数是否为质数

  87. findprime <- function(x) {
  88.   if (x %in% c(2,3,5,7)) return(TRUE)
  89.   if (x%%2 == 0 | x==1) return(FALSE)
  90.   xsqrt <- round(sqrt(x))
  91.   xseq <- seq(from=3,to=xsqrt,by=2)
  92.   if (all(x %% xseq !=0)) return(TRUE)
  93.   else return(FALSE)
  94. }
  95. # 列出1到100的质数,看函数对不对
  96. x = 1:100
  97. x[sapply(x,findprime)]

  98. # 寻找最大的质因子
  99. n <- 600851475143
  100. for (i in seq(from=3, to=round(sqrt(n)), by=2)) {
  101.   if (findprime(i) & n %% i == 0) {
  102.     n <- n / i
  103.     prime.factor <- i
  104.     if (i >= n)
  105.       break
  106.   }
  107. }
  108. print(prime.factor)



  109. x <- y <- 1:9
  110. data <- expand.grid(x=x,y=y)
  111. print(data)
  112. z <- data$x * data$y
  113. # 一个九九乘法表
  114. z <- matrix(z,ncol=9)

  115. set.seed(1)
  116. x <- round(runif(10),2)
  117. print(x)
  118. order(x)
  119. x[order(x)[1]]
  120. which.min(x)
  121. x[which.min(x)]
  122. x[order(x)]
  123. y <- 1:10
  124. data <- data.frame(x,y)
  125. class(data)
  126. head(data)
  127. data[1,]
  128. data[,1]
  129. data$x
  130. data[order(data$x),]

  131. # Project Euler 4
  132. # 在两个三位数字的乘积中,找出最大的回文数
  133. # 先建立一个将数字顺序进行反转的函数
  134. reverse <- function(n) {
  135.   reversed <- 0
  136.   while (n > 0) {
  137.     reversed <- 10 * reversed + n %% 10
  138.     n <- n%/%10
  139.   }
  140.   return(reversed)
  141. }

  142. # 从大到小搜索回文数
  143. x <- y <- 999:100
  144. data <- expand.grid(x=x,y=y)
  145. data$prod <- data$x * data$y
  146. data <- data[order(data$prod,decreasing=T),]
  147. head(data)
  148. value <- data$prod
  149. for (i in 1:length(value))
  150. {    isequal <- (value == reverse(value))   
  151.      if (isequal)
  152.      {        print(data[i,])        break    }}


  153. # 预备练习
  154. mat <- matrix(1:12,ncol=4)
  155. print(mat)
  156. t(mat)
  157. colnames(mat) <- c('one','two','three','four')
  158. rownames(mat) <- c('a','b','c')
  159. print(mat)
  160. apply(mat,1,sum)
  161. apply(mat,2,sum)
  162. sum(apply(mat,2,sum))
  163. prod(apply(mat,2,sum))
  164. # 之前建立的判断是否为质数的函数
  165. findprime <- function(x) {
  166.   if (x %in% c(2,3,5,7)) return(TRUE)
  167.   if (x%%2 == 0 | x==1) return(FALSE)
  168.   xsqrt <- round(sqrt(x))
  169.   xseq <- seq(from=3,to=xsqrt,by=2)
  170.   if (all(x %% xseq !=0)) return(TRUE)
  171.   else return(FALSE)
  172. }
  173. x = 1:20
  174. prime <- x[sapply(x,findprime)]

  175. # 欧拉问题五,寻找最小的能被1到20所整除的数。
  176. # 建立分解质因子的函数
  177. primefactor <- function(x,prime) {
  178.   m <- length(prime)
  179.   fac.count <- numeric(m)
  180.   names(fac.count) <- prime
  181.   for (i in 1:m) {
  182.     prime.num <- prime
  183.     while (x %% prime.num == 0 & x !=1 ) {
  184.       fac.count <- fac.count + 1
  185.       x = x / prime.num
  186.     }  
  187.   }
  188.   return(fac.count)
  189. }

  190. # 上面的函数负责对一个20以下的数分解为多个质数之积
  191. # 返回每个质因子对应的自乘次数
  192. primefactor(18,prime)

  193. # 对1到20每个数进行质因子分解,形成一个表格
  194. result <- t(sapply(1:20,primefactor,prime))
  195. # 求每列的极大值
  196. prime.power <- apply(result,2,max)
  197. prod(prime^prime.power)




  198. seq(from =1 ,to = 4,by = 1)   # style like python!
  199. seq(from =1 ,by = 1,to = 4)
  200. a<-seq(by = 1,from =1 ,to = 4)

  201. rep(a,8)
  202. rep(a,each = 8)
  203. rep(each = 8,a)
复制代码


r_dummy.zip (3.22 KB) 本附件包括:
  • r_dummy.R

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:笨办法学R编程 R编程 Project RStudio Article 倚天屠龙记 python 技巧 信息 知识

已有 2 人评分经验 收起 理由
oliyiyi + 100 精彩帖子
狂热的爱好者 + 24 精彩帖子

总评分: 经验 + 124   查看全部评分

沙发
狂热的爱好者 学生认证  发表于 2014-7-23 01:20:56

藤椅
blueroca 发表于 2016-2-18 10:34:34
真棒!这是看过的关于学习R操作的最好的办法,谢谢楼主!

板凳
oliyiyi 发表于 2016-2-20 13:15:06
非常好的东东,多分享一些啊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 17:55