在循环中应用函数

时间:2018-02-13 09:13:06

标签: r function loops vector

假设我们有4个向量,每个向量对应于第i年某些指标的值(我在11到14之间):

vector_11 <- c(1,2,3,4)
vector_12 <- c(5,6,7,8)
vector_13 <- c(9,10,11,12)
vector_14 <- c(13,14,15,16)

...以及以下功能:

myfunction <- function (vect){
res <- sum(vect)
return(res)
}

我想根据另一个变量的值“选择”向量:year。然后,将myfunction()应用于相应的向量。

我试过用循环和函数paste()来做这个,但问题是R把它读作一个字符参数:

year <- 14
for (i in 11:14){
 if (year==i){
  vect <- myfunction(paste("vector_",i,sep=''))
 }
}

1 个答案:

答案 0 :(得分:4)

您可以使用get()从环境中获取对象。所以这应该有效:

vector_11 <- c(1,2,3,4)
vector_12 <- c(5,6,7,8)
vector_13 <- c(9,10,11,12)
vector_14 <- c(13,14,15,16)

myfunction <- function (vect){
  res <- sum(vect)
  return(res)
}

year <- 14
for (i in 11:14){
  if (year==i){
    vect <- myfunction(get(paste("vector_",i,sep='')))
  }
}

然而,将矢量放在命名列表中,以及该列表中的子集,可能更容易/更好的做法,例如:

mylist = list('11' = c(1,2,3,4),
'12'=  c(5,6,7,8),
'13'=  c(9,10,11,12),
'14'=  c(13,14,15,16))

myfunction <- function (vect){
  res <- sum(vect)
  return(res)
}

year <- 14
for (i in 11:14){
  if (year==i){
    vect <- myfunction(mylist[[as.character(year)]])
  }
}

希望这有帮助!