2016-11-28 1 views
0

assign을 사용하여 문자 이름 벡터에 값을 할당 할 수 있습니다. 우리가 (벡터/매트릭스 /리스트가 될 수 target)를 target의 첫 번째 요소를 변경하려는 경우에는 색인 이름이 variable이라는 문자에 값을 할당하십시오.

assign("target",1:5) 

예를

를 들어, 우리는 어떻게해야합니까? 여기서도 target은 행렬 일 수 있으므로 한 요소, 한 행 또는 한 열을 변경할 수 있습니다. 내가

assign("target[1]",99) 

는 단지 새로운 객체가 target[1] 이름과 값이 여기에 99입니다 간단하고 시험 예

# This function is meaningless, just used to show my situation 
# variable_name is a character 
example_function <- function(variable_name){ 
    assign(variable_name,1:5) 

    if(rnorm(1)>1){ 
    variable_name[1] <- 99 #This will not work and I just need some function to achive this purpose 
    } 
} 
example_function("justAname") 
입니다 생성 사용하는 경우 나는

target[1] <- 99 

같은 것을하고 싶어

+0

'target [1] <- 99'는 문제없이 작동합니다 ... 무엇이 문제입니까? –

+0

변수 이름은 함수 내부에서 생성되므로, 해당 변수의 요소 중 하나를 변경하려고 할 때 정확한 변수 이름을 모를 경우 –

+0

'assign() '이하는 함수는 첫 번째 인수가 그것의 이름. 이것은'assign ("target", 1 : 5)'다음에, 1에서 5까지의 값을 가진'target'이라는 새로운 변수가 존재한다는 것을 의미합니다.'print (target)'하면 새로운 변수를 볼 수 있습니다. 그러므로,'target [1] - 99'을 실행하면'target'을 일반적인 변수로 처리 할 수 ​​있습니다. 그것을 시도해보십시오, –

답변

1

다른 접근 방식으로 [<- 기능을 사용할 수 있습니다.

f = function(variable_name){ 
    assign(variable_name,1:5) 
    if(rnorm(1)>1){ 
    `[<-`(eval(as.name(variable_name)),i = 1, value = 99) 
    } 
    get(variable_name) 
} 

이 또한 유사 행렬

f_mat = function(variable_name){ 
    assign(variable_name,matrix(1:25,nrow = 5)) 
    if(rnorm(1)>1){ 
    `[<-`(eval(as.name(variable_name)),i = 1, j = , value = 99) # for 1st row 
    # `[<-`(eval(as.name(variable_name)),i = , j = 1, value = 99) # for 1st col 
    #specify i and j for ith row jth column 
    } 
    get(variable_name) 
} 

및 목록 작업을해야한다.

관련 문제