gpt4 book ai didi

r - eval(call) 不同于在控制台中输入表达式

转载 作者:行者123 更新时间:2023-12-05 01:02:35 25 4
gpt4 key购买 nike

鉴于 call以下,
为什么eval(call)产生的结果不同于简单地将表达式直接输入到控制台

x <- list(Vect=seq(3), Mat=matrix(seq(9), ncol=3))

## This call came from the source to `as.data.table.list()`
theCall <- as.call(c(expression(data.frame), x))

theCall
# data.frame(Vect = 1:3, Mat = 1:9)

data.frame(Vect=1:3, Mat=1:9)
# Vect Mat
# 1 1 1
# 2 2 2
# 3 3 3
# 4 1 4
# 5 2 5
# 6 3 6
# 7 1 7
# 8 2 8
# 9 3 9

eval(theCall)
# Vect Mat.1 Mat.2 Mat.3
# 1 1 1 4 7
# 2 2 2 5 8
# 3 3 3 6 9

eval(parse(text=capture.output(theCall)))
# Vect Mat
# 1 1 1
# 2 2 2
# 3 3 3
# 4 1 4
# 5 2 5
# 6 3 6
# 7 1 7
# 8 2 8
# 9 3 9

我什至尝试在转换为调用的表达式的 dput 上调用 eval,但仍然无法获得与 eval(theCall) 相同的结果
dput(c(expression(data.frame), x))
# structure(expression(data.frame, Vect = 1:3, Mat = 1:9), .Names = c("", "Vect", "Mat"))

eval(as.call(structure(expression(data.frame, Vect = 1:3, Mat = 1:9), .Names = c("", "Vect", "Mat"))))
# Vect Mat
# 1 1 1
# 2 2 2
# 3 3 3
# 4 1 4
# 5 2 5
# 6 3 6
# 7 1 7
# 8 2 8
# 9 3 9

最佳答案

x ,您指定 Mat作为矩阵。

x <- list(Vect=seq(3), Mat=matrix(seq(9), ncol=3))
theCall <- as.call(c(expression(data.frame), x))

但是,当您查看 theCall 的输出时,看起来像 Mat是一个数字从 1 到 9 的向量。
theCall
# data.frame(Vect = 1:3, Mat = 1:9)

但这并不能说明全部。查看调用的结构。
str(theCall)
# language data.frame(Vect = 1:3, Mat = structure(1:9, .Dim = c(3L, 3L)))

你可以看到 Mat实际上表示为一个矩阵。 theCall的输出与其内部结构不同。当您运行 str 返回的命令时,可以看到如下数据框。
data.frame(Vect = 1:3, Mat = structure(1:9, .Dim = c(3L, 3L)))
# Vect Mat.1 Mat.2 Mat.3
# 1 1 1 4 7
# 2 2 2 5 8
# 3 3 3 6 9

毫不奇怪,这个结果与 eval(theCall) 的结果相同。 .
eval(theCall)
# Vect Mat.1 Mat.2 Mat.3
# 1 1 1 4 7
# 2 2 2 5 8
# 3 3 3 6 9

关于r - eval(call) 不同于在控制台中输入表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com