假设我们有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=''))
}
}
答案 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)]])
}
}
希望这有帮助!