如何从R中的IF语句返回列表?

如何从R中的IF语句返回列表?,r,R,如何从计算结果返回列表?列表的长度必须与第一个参数的长度相同 circlecalc <- function(var1,R){ if (is.numeric(R) && min(R) >=1){ (toupper(var1)=='AC') pi*R^2 } else if (toupper(var1)=='CC') { 2*pi*R } else if (toupper(var1)=='VS') { 4/3*pi*R^3 }

如何从计算结果返回列表?列表的长度必须与第一个参数的长度相同

circlecalc <- function(var1,R){
  if (is.numeric(R) && min(R) >=1){
  (toupper(var1)=='AC')
    pi*R^2
  } else if (toupper(var1)=='CC') {
    2*pi*R 
  } else if (toupper(var1)=='VS') {
    4/3*pi*R^3
  } else if (toupper(var1)=='AS') {
    4*pi*R^2
  } else stop ("not valid")
}
circlecalc=1){
(toupper(var1)='AC')
pi*R^2
}else if(toupper(var1)='CC'){
2*pi*R
}else if(toupper(var1)='VS'){
4/3*pi*R^3
}else if(toupper(var1)=='AS'){
4*pi*R^2
}否则停止(“无效”)
}

当前方法的问题是常规的
if
else
没有矢量化。当从矢量化的
dplyr
包中选择时,您可以尝试使用
case\u

library(dplyr)

circlecalc <- case_when(
    is.numeric(R) && min(R) >= 1 && toupper(var1) == 'AC' ~ pi*R^2,
    toupper(var1) == 'CC' ~ 2*pi*R,
    toupper(var1) == 'VS' ~ 4/3*pi*R^3,
    toupper(var1) == 'AS' ~ 4*pi*R^2,
    TRUE ~ "not valid"
)
库(dplyr)
circlecalc=1&&toupper(var1)='AC'~pi*R^2,
toupper(var1)='CC'~2*pi*R,
toupper(var1)='VS'~4/3*pi*R^3,
toupper(var1)='AS'~4*pi*R^2,
TRUE~“无效”
)