如果我有 4 个不同的变量 ( V1, V2, V3, V4
) 并且我想轻松地迭代它们,我可以使用的一种方法是for(var in c(V1, V2, V3, V4))
. 有什么方法可以将函数应用于var
返回它代表的变量?比如调用这个函数f
,代码
for(var in c(V1, V2, V3, V4))
print(f(var))
应该打印V1V2V3V4
。
似乎不太可能存在这样的功能,但我希望这里有人能给出明确的答案。
如果我有 4 个不同的变量 ( V1, V2, V3, V4
) 并且我想轻松地迭代它们,我可以使用的一种方法是for(var in c(V1, V2, V3, V4))
. 有什么方法可以将函数应用于var
返回它代表的变量?比如调用这个函数f
,代码
for(var in c(V1, V2, V3, V4))
print(f(var))
应该打印V1V2V3V4
。
似乎不太可能存在这样的功能,但我希望这里有人能给出明确的答案。
我经常遇到这种情况。
我的策略是遍历变量NAMES,然后使用get
.
例如:
for(v in c("V1", "V2", "V3", "V4")){
print(v)
# then to operate on the variable
var <- get(v)
}
一个额外的好处是你可以踢for
循环并使用 nicelapply
代替:
lapply(c("V1", "V2", "V3", "V4"), print)
#- or -#
lapply(c("V1", "V2", "V3", "V4"), function(v) {
print(v)
someActionOn(get(v)))
})
我想你可能会追求这样的事情:
f <- function( ... ){
args <- all.vars(match.call())
x <- mget(args , envir = sys.frame())
return( paste0( args , ": " , x ) )
}
V1 <- 1
V2 <- 2
V3 <- 3
f(V1 , V2 , V3)
# [1] "V1: 1" "V2: 2" "V3: 3"
match.call
这从字符向量中提取参数的名称,然后使用这些名称在mget
函数环境中查找附加到每个名称的值并将结果粘贴在一起。
但是,如果您有一个命名列表,您可以只使用sapply
withUSE.NAMES = TRUE
来遍历列表的元素,并返回一个命名向量,作为对列表的每个元素应用某些函数的结果:
sapply( list( V1 = 1 , V2 = 2 , V3 = 3 , V4 = 4 ) , `^` , 2 )
#V1 V2 V3 V4
# 1 4 9 16
在上面的示例中,我们应用了幂函数^
并传递了附加参数2
,即列表中的每个元素在x^2
哪里。x
也许你想将你的变量分组到某种结构中,比如一个列表,然后循环遍历列表的元素
v1=rnorm(1030)
v2=rnorm(1330)
v3=rnorm(130)
varlist=list(Vee1=v1,Bee2=v2,vi3=v3)
for(i in 1:length(varlist)) {
assign( paste( names(varlist)[i],
"meanish",
sep=""),
mean(varlist[[i]]))
}
然后看看ls()
你有什么。