也许我正在想象这个,但我认为有一个内置的R函数可以让你打印一个R向量(以及可能的其他对象,如矩阵和数据框)以您用来输入该对象的格式(作为字符串返回)。例如,在R中输出一个与R输入相同格式的向量
> x <- c(1,2,3)
> x
[1] 1 2 3
> magical.function(x)
"c(1,2,3)"
此功能是否存在?
也许我正在想象这个,但我认为有一个内置的R函数可以让你打印一个R向量(以及可能的其他对象,如矩阵和数据框)以您用来输入该对象的格式(作为字符串返回)。例如,在R中输出一个与R输入相同格式的向量
> x <- c(1,2,3)
> x
[1] 1 2 3
> magical.function(x)
"c(1,2,3)"
此功能是否存在?
dput
也许?
> test <- c(1,2,3)
> dput(test)
c(1, 2, 3)
您还可以一气呵成dump
了多个对象是写在你的工作目录中的文件:然后
> test2 <- matrix(1:10,nrow=2)
> test2
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> dump(c("test","test2"))
dumpdata.r
将包含:
test <-
c(1, 2, 3)
test2 <-
structure(1:10, .Dim = c(2L, 5L))
我决定添加这个解决方案也是因为我发现dput()
不能用于我正在尝试做的事情。我有一个shiny
应用程序,它使用knitr
根据用户会话制作报告,在使用我的.Rmd将用户参数从闪亮会话导入到.Rmd之前,我使用knit_expand()
。
没有进入太多细节,我需要按照原样移植向量,因为它们会被写入到某人运行的.Rmd中的代码行中。对于这种情况,dput()
不起作用,因为输出只能吐出到控制台,并且dump()
方法有效,但我不想每次都写新文件并删除它们。
可能有更好的方法,但是我写了一个函数,它返回“原样”矢量的字符对象。它处理数字和字符向量(它会在字符向量的每个成员周围引发引号)。它也处理单个输入并简单地返回它们。这不是很好,我相信有更有效的方法来编写它,但它完全符合我的需求。以为我会将这个解决方案加入到战斗中。
printVecAsis <- function(x) {
ifelse(length(x) == 1, x,
ifelse(is.character(x), paste0("c(", paste(sapply(x, function(a) paste0("\'",a,"\'")), collapse=", "), ")"),
paste0("c(", paste(x, collapse=", "), ")")))}
看看'deparse(x)'。 –