在此先非常感谢您的帮助-我是R编程的新手,并且一直试图在一个函数中使用通过一个函数接受的用户输入。第二个功能是一个简单的工资计算器,其中的三个变量是小时数,每小时工资率和工作时间超过180小时后乘以工资率的次数。要求用户输入上述变量。在另一个名为薪金的函数中,我试图在运行支出计算之前使用enterval接受输入。我陷入困境是因为当我达到“ if”条件时,第二个函数薪水中断,指定h>180。我在下面共享我的代码。再次感谢您的协助。我在先前的答案中进行搜索,但找不到能完全回答我的查询的特定实例-如果错过了适当的先前答案,我深表歉意。我在运行此代码时遇到的错误是“ h> 180中的错误:比较(6)仅适用于原子类型和列表类型”
enterval <- function() {
h <- (readline("Please enter number of hours: "))
h <- as.integer(h)
r <- (readline("Please enter applicable rate: "))
r <- as.integer(r)
m <- (readline("Please confirm your multiplier: "))
m <- as.integer(m)
}
salary <- function () {
enterval()
if (h > 180) {
totalpay <- (180*r) + ((h-180)*r*m)
}
else {
totalpay <- (h*r)
}
totalpay
}
我认为您需要的功能是这样的:
enterval <- function() {
h <- (readline("Please enter number of hours: "))
h <- as.numeric(h)
r <- (readline("Please enter applicable rate: "))
r <- as.numeric(r)
m <- (readline("Please confirm your multiplier: "))
m <- as.numeric(m)
list(h=h, r=r, m=m)
}
salary <- function () {
inputs <- enterval()
if (inputs$h > 180) {
totalpay <- (180*inputs$r) + ((inputs$h-180)*inputs$r*inputs$m)
}
else {
totalpay <- (inputs$h*inputs$r)
}
totalpay
}
输出:
> salary()
Please enter number of hours: 5
Please enter applicable rate: 0.5
Please confirm your multiplier: 2
[1] 2.5
在您的问题中,enterval
只返回了存储在其中的值,m
但即使没有将其保存在任何地方(因为您没有将其赋给内部变量,salary
因此它无法被使用salary
。)在R函数中,仅返回最后一个对象(或函数return
返回的值在上面的函数中,我返回一个包含h
,r
和元素的列表m
。
然后,我将该列表保存为inputs
可以使用的列表salary
。inputs
可以使用$
运算符访问其中的元素。
另外,作为一个小的补充,当您说出速率时,我相信它是0-1之间的数字,所以我更改as.integer
为,as.numeric
因为as.integer
它将四舍五入为整数。as.integer
如果确实需要整数,请随时将其更改回。
编辑
更好并且可能更高级的写作方式salary
:
根据@RichardScriven的注释,避免键入所有input$*
变量的一种好方法是list2env
像这样使用:
salary <- function () {
inputs <- enterval()
list2env(inputs, environment())
if (h > 180) {
totalpay <- (180*r) + (h-180)*r*m)
}
else {
totalpay <- (h*r)
}
totalpay
}
list2env
本质上将在薪金环境内的列表元素之外创建变量,无需使用即可立即访问这些变量input$*
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句