前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学习】笨办法学R编程(三)

【学习】笨办法学R编程(三)

作者头像
小莹莹
发布2018-04-18 17:58:04
1.2K0
发布2018-04-18 17:58:04
举报
文章被收录于专栏:PPV课数据科学社区

看到各位对“笨办法系列”的东西还比较感兴趣,我也很乐意继续写下去。今天的示例将会用到数据框(data.frame)这种数据类型,并学习如何组合计算两个向量,以及如何排序。我们将用所学的东西来解决Project Euler的第四个问题,就是找出一个集合中最大的回文数。回文数是指一个像1534351这样“对称”的数,如果将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样。开始啦!

# 预备练习 x <- y <- 1:9 data <- expand.grid(x=x,y=y) print(data) z <- data$x * data$y # 一个九九乘法表 z <- matrix(z,ncol=9) set.seed(1) x <- round(runif(10),2) print(x) order(x) x[order(x)[1]] which.min(x) x[which.min(x)] x[order(x)] y <- 1:10 data <- data.frame(x,y) class(data) head(data) data[1,] data[,1] data$x data[order(data$x),] # Project Euler 4 # 在两个三位数字的乘积中,找出最大的回文数 # 先建立一个将数字顺序进行反转的函数 reverse <- function(n) { reversed <- 0 while (n > 0) { reversed <- 10 * reversed + n %% 10 n <- n%/%10 } return(reversed) } # 从大到小搜索回文数 x <- y <- 999:100 data <- expand.grid(x=x,y=y) data$prod <- data$x * data$y data <- data[order(data$prod,decreasing=T),] head(data) value <- data$prod for (i in 1:length(value)) { isequal <- (value[i] == reverse(value[i])) if (isequal) { print(data[i,]) break }} 得到的结果是906609,本例是先将乘积排序后再判断是否回文数,找到的第一个就是答案,所以速度会快一点。如果不用expand.grid函数的话,可以利用嵌套for来组合计算。另外还有一种作法是利用R本身的rev函数,先将数字转为字符,再切开成一串向量,用rev反转后判断。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2014-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档