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

看到各位对“笨办法系列”的东西还比较感兴趣,我也很乐意继续写下去。今天的示例将会用到数据框(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反转后判断。

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2014-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发与安全

算法:图解最小生成树之普里姆(Prim)算法

我们在图的定义中说过,带有权值的图就是网结构。一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边。所谓的最小成本,就...

3999
来自专栏bboysoul

1475: C语言实验题――一元二次方程 II

描述:求一元二次方程ax2+bx+c=0的解。a,b,c为任意实数。 输入:输入数据有一行,包括a b c的值 输出:按以下格式输出方程的根x1和x2。x1...

1243
来自专栏蜉蝣禅修之道

优化后的Levensthein distance算法实现

3875
来自专栏数据结构与算法

1038 一元三次方程求解

1038 一元三次方程求解 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver ...

2888
来自专栏算法channel

图算法|Prim算法求最小生成树

01 — 一个实际问题 要在n个城市之间铺设光缆,要求有2个: 这 n 个城市的任意两个之间都可以通信; 铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,...

9627
来自专栏数据结构与算法

2018.7.30考试

题意:给出两棵树,问在两棵树中任意删除一条边后$1$号节点所在集合的元素相同的方案

1245
来自专栏计算机视觉与深度学习基础

Leetcode 132 Palindrome Partitioning II

Given a string s, partition s such that every substring of the partition is a p...

20810
来自专栏软件开发 -- 分享 互助 成长

经典算法学习之回溯法

回溯法的应用范围:只要能把待求解的问题分成不太多的步骤,每个步骤又只有不太多的选择就可以考虑使用回溯法。  若用回溯法求问题的所有解时,要回溯到根,且根结点的所...

2378
来自专栏数据结构与算法

Day4晚笔记

数据结构 并查集:捆绑两个点的信息,判断对错 倍增:LCA, 字符串 hash,模拟, 最小表示法 给定一个环状字符串,切开,使得字符串的字典序最小 图和树 割...

2644
来自专栏深度学习之tensorflow实战篇

tensorflow载入数据的三种方式 之 TF生成数据的方法

Tensorflow数据读取有三种方式: Preloaded data: 预加载数据 Feeding: Python产生数据,再把数据喂给后端。 Reading...

4254

扫码关注云+社区

领取腾讯云代金券