在 R 中创建一个仅大写向量的前 n 个元素的函数

Creating a function in R that capitalizes ONLY the first n elements of a vector

我想创建一个函数 (v,n),其中 v 是一个字符串值向量,n 是一个整数。此函数应仅将向量的前 n 个元素大写。并且如果n大于length(v),它应该将向量中的所有元素大写。

所以如果我有:v = c("a","b","c","d") 和 n = 3,函数应该 return:

[1]   ("A", "B", "C", "d")

到目前为止,我有这个:

function(v, n){
  if(n <= length(v))
  {i = seq_len(n)
  v[i]= toupper(v[i])}
  return(v)} 

但是当我尝试将其应用于矢量时(使用 sapply):

test = sapply(v, function, n=3)

没有任何反应。向量中的 None 个元素大写

以下是如何在 R 中定义函数以及如何调用它。

my_toupper <- function(v, n){
  if(n <= length(v)) {
    i = seq_len(n)
    v[i]= toupper(v[i])
  }
  return(v)
} 


my_toupper(v = c("a","b","c","d"), n = 3)

上面的命令return这个结果

[1] "A" "B" "C" "d"

toupper 是矢量化函数,因此您不需要循环或任何应用函数。

v = c("a","b","c","d")

capitilize_n <- function(vec, n) {
  n <- min(n, length(vec))
  inds <- seq_len(n)
  vec[inds] <- toupper(vec[inds])  
  return(vec)
}

capitilize_n(v, 3)
#[1] "A" "B" "C" "d"

capitilize_n(v, 8)
#[1] "A" "B" "C" "D"