2017-01-18 5 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

関連する問題