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

时间:2019-02-11 01:02:39

标签: 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
  } else if (toupper(var1)=='AS') {
    4*pi*R^2
  } else stop ("not valid")
}

1 个答案:

答案 0 :(得分:1)

您当前方法的问题是常规ifelse没有向量化。您可以尝试使用case_when软件包中的dplyr,它是矢量化的。

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"
)