如何获得保留我指定的值的函数? (R)

时间:2014-09-10 15:34:49

标签: r function environment-variables

这是我之前发布的有关如何为名称向量指定值的问题的后续跟进:R: How do I concisely assign names to vector parameter components?

我想为名称向量赋值,我需要在下面的代码中的函数2的多个不同函数中执行此操作。我没有将代码插入到每个函数中,而是想编写下面的函数形式1的子例程,并在每个函数中调用它。不幸的是,当我调用它时,名称分配保留在function1中,并且不能在" return(adam + ...)"中使用。部分。我怀疑这与我如何为assign函数指定环境有关,但我不知道如何修复它(我不想全局分配名称)。有人可以帮忙吗?

我尝试使用的粗略代码如下:

function1 <- function(vector, names){

for (i in 1:length(vector){

  assign(names[i], vector[,i], envir = environment())
}

}

function2 <- function(vector){

 names1 <- c("adam", "becky", "charlie",...)

 function1(vector,names1)

 return( adam + becky^2 - 2*charlie*david +...)

 }

2 个答案:

答案 0 :(得分:1)

你不想为名字分配编写一个函数,更不用说包含循环的函数了。

改为使用命名向量。 例如:

vec1 <- c("this","that","the other")
vec2 <- c(5,7,9)
names(vec2) <- vec1

然后这个工作

vec2['that'] <- vec2['that'] + 1
print(vec2)
 this      that the other 
    5         8         9 

答案 1 :(得分:0)

您可以尝试:

function1 <- function(vector, names, envir){
for (i in 1:length(vector)){
 assign(names[i], vector[i], envir = envir)
 }
 }

function2 <- function(vector){
names1 <- c("adam", "becky", "charlie", "david")
function1(vector,names1, envir=environment())
return(adam + becky^2 - 2*charlie*david)
}


v1 <- 1:4
function2(v1)
#[1] -19
adam
#Error: object 'adam' not found