我在 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)
用户可以更改值的大小,因此如果他选择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)
最佳答案
试试这个,它会颠倒输入向量的顺序并在之间粘贴“and”:
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 - 改进 if else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72141914/