我在R中有以下函数.它工作正常,但是,我认为这一定是运行此函数的更好方法.

values <- c("a","b")


print <- function(values){
  
  size <- length(values)

  if (size == 1) {
  
  final <- values[1]
  
}else if(size == 2){
  
  final <- paste0(values[2], " and ", values[1])
}else if(size == 3){
  
  final <- paste0(values[3], " and ",values[2], " and ", values[1])
  
}
  return(final)
}
print(values)

用户可以更改值的大小,因此如果 Select values <- c("a","b", "c"),函数将在最后一个条件下运行.然而,在艺术中,最后一个条件等于第二个条件加上一些新的东西.可以在使用前一个条件的行中创建if语句或其他内容.比如:

values <- c("a","b", "c")


print <- function(values){
  
  size <- length(values)

  if (size == 1) {
  
  final <- values[1]
  
}else if(size == 2){
  
  final <- paste0(values[2], " and ", final )
}else if(size == 3){
  
  final <- paste0(values[3], " and ",final )
  
}
  return(final)
}
print(values)

推荐答案

试试这个,它会反转输入向量的顺序,并在以下两者之间粘贴"和":

newfun <- function(x){
  ifelse(length(x)>1, paste(rev(x), collapse = " and "), x)
}

输出:

newfun(letters[1])
 # [1] "a"

newfun(letters[1:2])]
 # [1] "b and a"

# and so on...

newfun(letters[1:5])
 # [1] "e and d and c and b and a"

对函数进行测试,看看是否相同:

all.equal(print(letters[1:3]), 
          newfun(letters[1:3]))
# [1] TRUE

我还想提醒一下,命名用户定义的函数名称已经是R中固有的(即print()已经是R中的函数).

R相关问答推荐

如何在ggplot中标记qqplot上的点?

在ggplot中为不同几何体使用不同的 colored颜色 比例

根据现有列的名称和字符串的存在进行变异以创建多个新列

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

将一个字符串向量调整为与其他字符串向量完全相同的大小

Data.table';S GForce-将多个函数应用于多列(带可选参数)

从R中发出的咕噜声中的BUG?

在R中,如何将误差条放置在堆叠的每个条上?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

删除字符串R中的重复项

数值型数据与字符混合时如何进行绑定

基于R中的引用将向量值替换为数据框列的值

如何在矩阵图中按标准对数据进行分组以绘制矩阵

具有由向量定义的可变步长的序列

合并多个数据帧,同时将它们的名称保留为列名?

如何在分组蜂群小区中正确定位标签

使用循环改进功能( struct 简单)

按组判断值是否再次出现

可以在R中同步3D散点图(打印)吗?