2017-01-18 7 views
1

data.frame에 속성을 설정해야하지만 변수의 data.frame 이름을 전달하고 싶습니다. 나는 견적, 대체, 구문 분석, 표현의 여러 조합을 성공하지 못하게 시도했다. 어떻게 할 수 있습니까?R 내부의 문자열 사용하기

#OK code 

my_data_frame <- data_frame(col = 1:10) 
attr(my_data_frame, "attr1") <- 1L 
attributes(my_data_frame) 

#Not OK code 

df_name <- "my_data_frame" 

attr(as.name(df_name), "attr2") <- 2L #this does not work 
attr(quote(eval(df_name)), "attr2") <- 2L #this does not work 
attr(parse(text = eval(df_name)), "attr2") <- 2L #this also don't work 
+0

여기 못생긴 한 줄의 (다른) 솔루션입니다 :'지정 (df_name, \'ATTR <- \'( –

답변

2

글쎄, 나는 해결책 여기에

eval(substitute(attr(a, "attr2") <- 225L, list(a = as.name(df_name)))) 
1

당신이 목록으로 data.frame를 넣어 경우가 작동합니다

myList <- list(my_data_frame=my_data_frame) 

# add attribute 
attr(myList[[df_name]], "attr2") <- 2L 

# check 
attr(myList[[df_name]], "attr2") 
[1] 2 

# return to data.frame 
my_data_frame <- myList[[df_name]] 

# check regular data.frame 
attr(my_data_frame, "attr2") 
[1] 2 

나는이 data.frames 목록 작업에 추가적인 장점 것 같다. 추가적인 이점을 얻으려면 gregor의 답변 here을 참조하십시오.

1

에게 발견

my_data_frame <- data_frame(col = 1:10) 
attr(my_data_frame, "attr1") <- 1L 
attributes(my_data_frame) 

df_name <- "my_data_frame" 

assign_attr <- function(obj_name, attr_name, value) { 
    temp_obj <- get(obj_name, envir=parent.frame(2)) 
    attr(temp_obj, attr_name) <- value 
    assign(obj_name, temp_obj, envir=parent.frame(2)) 
} 

assign_attr(df_name, "attr1", 1) 
print(attributes(my_data_frame)) 
+0

attr (get (df_name), "attr1") <- 1. 가장 논리적 인 해결책이 될 것입니다. 어떤 이유로 R에서 구현되지 않습니다. – thc