R编程:表达式计算

时间:2014-08-15 03:07:11

标签: r vectorization

任何人都可以帮我解决以下问题:

  

8 x 8

     

8 x 88

     

8 x 888

     

8 x 8888

     

8 x 88888

我将使用R编程来进行计算。但有没有一种方法可以使用R代码进行此计算,单个R表达式没有逗号和大括号(即使用和{})。

无论如何要通过矢量化来做到这一点,而不使用条件语句(if,while,for)?

3 个答案:

答案 0 :(得分:10)

一系列的顺序:

cumsum(10^(0:4))
## [1]     1    11   111  1111 11111

八分:

8 * cumsum(10^(0:4))
## [1]     8    88   888  8888 88888

时代八:

 8 * 8 * cumsum(10^(0:4))
## [1]     64    704   7104  71104 711104

答案 1 :(得分:0)

我不喜欢在不使用逗号或括号的规则内玩:

> sapply(trunc(( 8/9)*10^(1:6) ) , 
           function(y) substitute( 8 * y, list(y=y) ) )
[[1]]
8 * 8

[[2]]
8 * 88

[[3]]
8 * 888

[[4]]
8 * 8888

[[5]]
8 * 88888

[[6]]
8 * 888888

并给出这些表达式的结果:

> lapply( sapply(trunc(( 8/9)*10^(1:6) ) , 
                   function(y) substitute( 8 * y, list(y=y) ) ), eval)
[[1]]
[1] 64

[[2]]
[1] 704

[[3]]
[1] 7104

[[4]]
[1] 71104

[[5]]
[1] 711104

[[6]]
[1] 7111104

答案 2 :(得分:0)

我认为你应该考虑你真正想要的东西,因为有几种方法可以做到这一点。以下是一些示例:

示例1(所有输入参数免费):

 result <- (n_ini=scan(,what=numeric(),1))*
           (n_end=scan(,what=numeric(),1))*
           (((cumsum(10^((x_init=scan(,what=numeric(),1)):
              (x_count=scan(,what=numeric(),1)))))))

示例2(一个数字乘以一定数量的次数):

小心不要将整个代码复制并粘贴到必须为零件运行的工作中......

n_self <- scan(n=1)  
print ("Press [enter] to continue")  
x_countstop <- scan(n=1)  
result2 <- n_self*n_self*(cumsum(10^((0):(x_countstop))))  
result2  

有无数的方法可以做到这一点,但我希望这些可以作为一些东西。

最好的问候