在R

时间:2017-01-18 19:21:16

标签: r dataframe expression-evaluation

我需要在data.frame上设置一个属性,但我想从变量中传递data.frame名称。我尝试了几种引用,替换,解析,表达的组合,但都没有成功。怎么做?

#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

3 个答案:

答案 0 :(得分:2)

好吧,我找到了解决方案

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

答案 1 :(得分:1)

如果您将data.frame放入列表中,这将有效:

elementGetText() function expects text only elment but START_ELEMENT was encountered.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:851)
at com.sun.xml.internal.stream.XMLEventReaderImpl.getElementText(XMLEventReaderImpl.java:188)

我想这是使用data.frames列表的另一个优势。请参阅gregor的答案here以获得更多优势。

答案 2 :(得分: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))