评估存储为字符串值的 dataframe$column 表达式
Evaluate dataframe$column expression stored as a string value
是否可以计算以下形式的字符串,使其等同于相同的 "literal" 表达式?
示例数据和代码:
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]"
文字按预期工作
> df.name$col2[4]
[1] D
get()
不等价于:
get(var1)
## Error in get(var1) : object 'df.name$col2[4]' not found
这种形式get()
"works"但是没有解决问题
get("df.name")$col2[4]
[1] D
根据其他帖子,我已尝试 eval(parse())
和 eval(parse(text()))
但没有成功。
我正在尝试创建一个函数,该函数将使用传递给该函数的 col.name
搜索(子集)df.name
。我想避免为每个列名编写一个单独的函数,尽管这会起作用,因为我可以将 df.name$col2[row.num]
编码为 "literal".
编辑
示例代码应该将 row.num 显示为数字/整数类型,即 row.num = 4
你快到了:
> eval(parse(text = var1))
[1] "D"
因为默认解析期望文件,需要指定text
参数。
I'm trying to create a function that will search (subset) df.name using the col.name passed to the function.
设置数据:
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"
解决你的终极问题(按列名索引数据框)而不是你的近端问题(弄清楚如何使用 get()
/eval()
等)问题:正如@RichardScriven 指出的那样,
f <- function(col.name,row.num,data=df.name)
return(data[[col.name]][as.numeric(row.num)])
}
应该可以。如果可能的话,如果您将行号指定为数字而不是字符,可能会更符合习惯...
是否可以计算以下形式的字符串,使其等同于相同的 "literal" 表达式?
示例数据和代码:
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]"
文字按预期工作
> df.name$col2[4]
[1] D
get()
不等价于:
get(var1)
## Error in get(var1) : object 'df.name$col2[4]' not found
这种形式get()
"works"但是没有解决问题
get("df.name")$col2[4]
[1] D
根据其他帖子,我已尝试 eval(parse())
和 eval(parse(text()))
但没有成功。
我正在尝试创建一个函数,该函数将使用传递给该函数的 col.name
搜索(子集)df.name
。我想避免为每个列名编写一个单独的函数,尽管这会起作用,因为我可以将 df.name$col2[row.num]
编码为 "literal".
编辑
示例代码应该将 row.num 显示为数字/整数类型,即 row.num = 4
你快到了:
> eval(parse(text = var1))
[1] "D"
因为默认解析期望文件,需要指定text
参数。
I'm trying to create a function that will search (subset) df.name using the col.name passed to the function.
设置数据:
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"
解决你的终极问题(按列名索引数据框)而不是你的近端问题(弄清楚如何使用 get()
/eval()
等)问题:正如@RichardScriven 指出的那样,
f <- function(col.name,row.num,data=df.name)
return(data[[col.name]][as.numeric(row.num)])
}
应该可以。如果可能的话,如果您将行号指定为数字而不是字符,可能会更符合习惯...