Evaluate dataframe$column expression stored as a string value

匆匆过客 提交于 2019-12-02 18:12:01

问题


Can a string of the form below be evaluated so that it is equivalent to the same "literal" expression?

Example data and code:

df.name = data.frame(col1 = 1:5, col2 = LETTERS[seq(1:5)], col3 = letters[seq(1:5)], stringsAsFactors = FALSE)
col.name = "col2"
row.num = "4"

var1 = str_c("df.name$", col.name,"[",row.num,"]")

> var1
[1] "df.name$col2[4]"

The literal works as expected

> df.name$col2[4]
[1] D

get() is not equivalent:

get(var1)
## Error in get(var1) : object 'df.name$col2[4]' not found

This form of get() "works" but does not solve the problem

get("df.name")$col2[4]
[1] D

Per other posts I've tried eval(parse()) and eval(parse(text())) without success.

I'm trying to create a function that will search (subset) df.name using the col.name passed to the function. I want to avoid writing a separate function for each column name, though that will work since I can code df.name$col2[row.num] as a "literal".

EDIT

The example code should have shown the row.num as type numeric / integer, i.e., row.num = 4


回答1:


I'm trying to create a function that will search (subset) df.name using the col.name passed to the function.

Set up data:

df.name = data.frame(col1 = 1:5, col2 = LETTERS[1:5], ## seq() is unnecessary
                     col3 = letters[1:5], 
                     stringsAsFactors = FALSE)
col.name = "col2"
row.num = "4"

Solving your ultimate (index the data frame by column name) rather than your proximal (figure out how to use get()/eval() etc.) question: as @RichardScriven points out,

f <- function(col.name,row.num,data=df.name)
   return(data[[col.name]][as.numeric(row.num)])
}

should work. It would probably be more idiomatic if you specified the row number as numeric rather than character, if possible ...




回答2:


You are almost there:

> eval(parse(text = var1))
[1] "D"

Because parse expecting file by default, you need to specify the text parameter.



来源:https://stackoverflow.com/questions/39601433/evaluate-dataframecolumn-expression-stored-as-a-string-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!