我对r比较新,我想编写一个函数calCS来执行以下任务: 计算圆的面积(AC = pi * r ^ 2),圆的圆周(CC = 2 * pi * r),球体的体积(VS =(4/3) pi r3或球体的面积(AS = 4 * pi * r ^ 2) 。第一个参数是AC,CC,VS或AS,以确定需要执行哪个计算 。第一个参数采用的值可以包含低位,高位或混合的字母大小写 (使用toupper功能) 。如果参数的值不是AC,CC,VS或AS,则停止该功能并写入 ❵不支持你的方法✬ 。第二个参数是半径(r)。确保对此问题使用if ... else语句。 我试过使用多个if else语句,但一次又一次得到与括号相关的错误。
calCS <- function(x,r){
if(x="AC"){
a <- pi*r^2
print(a)
}
} else {
if(x="CC"){
b <- 2*pi*r
print(b)
}else {
if(x = "VS"){
c <- (4/3)*3.14*(r^3)
print(c)
}else {
if(x = "AS"){
d = 4*pi*(r^2)
print(d)
}
}
}
}
得到错误:意外&#39;}&#39;在&#34;}&#34;
答案 0 :(得分:1)
试试这个:
calcCS <- function(x, r) {
print_and_return <- function(x) { print(x); x }
print_and_return(switch(x, AC = pi * r^2, CC = 2 * pi * r,
VS = (4/3)*3.14*(r^3), 4*pi*(r^2)))
}
答案 1 :(得分:1)
你有两个主要问题。
else if
。 =
与==
不同。其他需要改进的地方(甚至在必须使用if
和else
的范围内)是你的功能不是很干。你有四个print
,而一个就足够了。此外,缩进有助于提高可读性。
这是一个让你入门的虚拟功能。您显然知道如何定义函数并打印它们,因此您可以从那里进行替换:
calCS <- function(x, r) {
if (!x %in% c("AC", "CC", "VS")) stop("Your method is not supported")
if (x == "AC") {
sprintf("I am a cat with %s toes", r)
} else if (x == "CC") {
sprintf("I wish I had %s toes", r)
} else if (x == "VS") {
sprintf("I just counted %s toes", r)
}
}
行动中的功能示例:
calCS("AC", 3)
# [1] "I am a cat with 3 toes"
calCS("CC", 3)
# [1] "I wish I had 3 toes"
calCS("VS", 3)
# [1] "I just counted 3 toes"
并且,如果有不受支持的方法:
calCS("rat", 3)
# Error in calCS("rat", 3) : Your method is not supported
我将保留toupper
的集成以及任何其他错误检查,因为这与if else
无关。