在R中创建边界

在R中创建边界,r,R,我试图在R中创建一个函数,要求用户输入一个数字,然后说明它是否为阿姆斯特朗数字,然后继续要求用户输入上下限,然后R将在该间隔内显示阿姆斯特朗数字 这是我目前掌握的代码: Armstrong <- function() { num <- as.integer(readline(prompt="Enter a number: ")) sum <- 0 temp <- num while(temp > 0) { digit <- temp %

我试图在R中创建一个函数,要求用户输入一个数字,然后说明它是否为阿姆斯特朗数字,然后继续要求用户输入上下限,然后R将在该间隔内显示阿姆斯特朗数字

这是我目前掌握的代码:

Armstrong <- function() {
  num <- as.integer(readline(prompt="Enter a number: "))
  sum <- 0
  temp <- num
  while(temp > 0) {
    digit <- temp %% 10
    sum <- sum + (digit ^ 3)
    temp <- floor(temp / 10)
  }

Armstrong也许以下内容符合您的要求。
该函数现在接受两个参数。然后,它使用
sapply
循环调用一个内部函数
arms
,该函数完成所有工作。
请注意,键盘输入使用软件包
lava
的功能
wait
。您需要首先使用
install.packages(“lava”)
安装它


Armstrong这里有一个答案,它使用了一个更一般的定义,即一个数字等于其数字之和,每个数字都被提升为数字的幂:

Armstrong <- function(n){
  digits <- as.numeric(unlist(strsplit(as.character(n),'')))
  k <- length(digits)
  n == sum(digits^k)
}

这与上面链接的维基百科文章中的部分列表一致。

您的函数中有一个递归调用
sapply(Lnum:Unum,Armstrong)
Lnum:Unum
中的每个
i
调用
Armstrong(i)
。但是,您的
Armstrong
函数不接受参数,因此会出现错误。我不知道如何计算Armstrong数,但您的函数必须这样开始:
Armstrong为什么要将指数固定在
3
?这只适用于3位数的阿姆斯特朗数字。此外,您的单一函数方法(提示用户输入和验证条件)不是一个好的设计。您的函数只需检查数字是否为Armstrong。然后编写使用此函数的其他函数,例如提示用户输入或检查给定范围内的所有数字。@JohnColeman我同意你的说法,但我必须在一个函数中完成所有操作。一个阿姆斯特朗数等于它的数字立方的和。我能在网上找到的定义是,如果一个数等于提升到等于位数的幂次方的数字之和,那么这个数就是阿姆斯特朗。可能您的讲师使用的是非标准定义。我需要能够键入“Armstrong()”,然后生成“输入一个数字:”,然后声明“是Armstrong”或“不是Armstrong”。然后,另一个提示必须要求输入“上边界”和“下边界”,然后在该边界中生成一个由用户输入的阿姆斯特朗数字字符串——所有这些数字都在一个范围内function@VPedlar看看是不是这个。
Armstrong <- function(n){
  digits <- as.numeric(unlist(strsplit(as.character(n),'')))
  k <- length(digits)
  n == sum(digits^k)
}
Armstrong.inrange <- function(a,b){
  nums <- a:b
  nums[which(sapply(nums,Armstrong))]
}
> Armstrong.inrange(0,10000)
 [1]    0    1    2    3    4    5    6    7    8    9  153  370  371  407 1634
[16] 8208 9474