是否有一个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)
是否存在这样的功能?
答案 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)