R函数接受一个对象并返回在R解释器中生成该对象所需的代码

时间:2019-01-30 07:02:14

标签: r

是否有一个R函数接受R对象并返回可运行以生成该对象的代码?

示例

通过iris数据帧的前5行时

iris
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa

该函数将生成如下字符串:

string <- "data.frame(\"Sepal.Length\"=as.numeric(c(5.1, 4.9, 4.7, 4.6, 5.0)), \"Sepal.Width\"=as.numeric(c(3.5, 3.0, 3.2, 3.1, 3.6)), \"Petal.Length\"=as.numeric(c(1.4, 1.4, 1.3, 1.5, 1.4)), \"Petal.Width\"=as.numeric(c(0.2, 0.2, 0.2, 0.2, 0.2)), \"Species\"=as.factor(c(\"setosa\", \"setosa\", \"setosa\", \"setosa\", \"setosa\")), stringsAsFactors = FALSE)"

然后调用cat(string)将进行打印以控制台化生成对象所需的确切代码(在本例中为数据框)

data.frame("Sepal.Length"=as.numeric(c(5.1, 4.9, 4.7, 4.6, 5.0)), "Sepal.Width"=as.numeric(c(3.5, 3.0, 3.2, 3.1, 3.6)), "Petal.Length"=as.numeric(c(1.4, 1.4, 1.3, 1.5, 1.4)), "Petal.Width"=as.numeric(c(0.2, 0.2, 0.2, 0.2, 0.2)), "Species"=as.factor(c("setosa", "setosa", "setosa", "setosa", "setosa")), stringsAsFactors = FALSE)

是否存在这样的功能?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找dput

例如,对于iris的前5行,您可以

dput(iris[1:5,])

#structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5), Sepal.Width = c(3.5, 
#3, 3.2, 3.1, 3.6), Petal.Length = c(1.4, 1.4, 1.3, 1.5, 1.4), 
#    Petal.Width = c(0.2, 0.2, 0.2, 0.2, 0.2), Species = structure(c(1L, 
#    1L, 1L, 1L, 1L), .Label = c("setosa", "versicolor", "virginica"
#    ), class = "factor")), .Names = c("Sepal.Length", "Sepal.Width", 
#"Petal.Length", "Petal.Width", "Species"), row.names = c(NA, 
#5L), class = "data.frame")

,现在您可以使用相同的代码重新创建对象。

另一个例子

x <- c(3, 4, 1, 2)
dput(x)
#c(3, 4, 1, 2)