R语言,解释下这code

Python011

R语言,解释下这code,第1张

if (any(sieve ==i)) { # 如果i在sieve里 也可以写成 if ( i %in% sieve ) {

  primes <- c(primes, i)   # 把i放到prime里

  sieve <- c(sieve[(seive %% i) != 0], i)  #把所有sieve里i的整数倍数(除了i)取走

  # %%是mod, 余数,所以 sieve[seive%%i) !=0]是所有seive里除以i余数不为0的数

}

整个这段代码是找出所有比n小的质数

# Q1

x = 0.5

n = 0

while ( abs(x - cos(x)) > 0.01) {

    x = cos(x)

    n = n + 1

}

print(sprintf('%i, x=%.3f, cos(x)=%.3f', n, x, cos(x))

Q2,正好刚刚回答了另一个R的质数的问题(http://zhidao.baidu.com/question/571598738),借过来用一下。这个数比较大,要运行一段时间,别着急。

Eratosthenes <- function(n) {

   if (n>2) {

      sieve <- seq(2,n)

      primes <- c()

      for ( i in seq(2,n)) {

          if (any(sieve == i)) {       

              primes <- c ( primes, i)    

              sieve <- c ( sieve[(sieve %% i ) != 0 ], i) 

              if ((i-2) %in% sieve) {

                print(sprintf("%i, %i", (i-2), (i)))

              }

           }

       }

       return(primes)

     } else {

        print ("n > 2")

     }

}

primes = Eratosthenes(1000^2)

[1] "3, 5"

[1] "5, 7"

[1] "11, 13"

[1] "17, 19"

[1] "29, 31"

[1] "41, 43"

[1] "59, 61"

[1] "71, 73"

...

首先order是直接返回位置的

可以用which来取到满足条件的下标

//定义a和向量m

a = 2.5

m = c(1,2,3,4,5)

//求差取绝对值

k = abs(m-a)

which.min(k) //只返回满足条件一个下标

which(k==min(k)) //可以返回所有的最小数的下标

m[(k==min(k)] //返回所有满足条件的数

不好意思,我直接回答了。分不给也不要紧,难道LZ在考试?