如果我有 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函数环境中查找附加到每个名称的值并将结果粘贴在一起。
但是,如果您有一个命名列表,您可以只使用sapplywithUSE.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()你有什么。