簡體   English   中英

如何獲得保留分配的值的功能? (R)

[英]How do I get a function to retain values I assign? (R)

這是我早些時候發布的有關如何為名稱向量分配值的問題的跟進: R:如何簡潔地為向量參數組件分配名稱?

我想為名稱向量分配值,並且需要在下面的代碼中使用形式為function2的多個不同函數來執行此操作。 我不想將代碼插入每個函數中,而是要編寫下面形式為function1的子例程,然后在每個函數中調用它。 不幸的是,當我調用它時,名稱分配保留在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 +...)

 }

您不想編寫用於名稱分配的函數,更不用說包含循環的函數了。

請改用命名向量。 例如:

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 

您可以嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM