来自Java / Scala,我一直试图弄清楚如何将任何值转换为等效的字符串。
基本上,我想获取您在R REPL中看到的输出并将其用作字符串。
myFunc <- function(x) { x + 1}
myFunc
#function(x) { x + 1}
其他情况与SparkR
相似:
sc
#Java ref type org.apache.spark.api.java.JavaSparkContext id 0
我尝试过使用toString()
和as.character()
等选项,但这些选项都失败了:
toString(myFunc)
#Error in paste(x, collapse = ", ") :
# cannot coerce type 'closure' to vector of type 'character'
toString(sc)
#Error in as.vector(x, "character") :
# cannot coerce type 'environment' to vector of type 'character'
我可以这样做:
rawString <- function(obj) {
tmp <- "/tmp/rawString.txt"
if (file.exists(tmp)) file.remove(tmp)
sink(tmp)
print(obj)
sink()
dataString <- paste(readLines(tmp))
if (file.exists(tmp)) file.remove(tmp)
trimws(dataString)
}
function(obj) {
tmp <- "/tmp/rawString.txt"
if (file.exists(tmp)) file.remove(tmp)
sink(tmp)
print(obj)
sink()
dataString <- paste(readLines(tmp))
if (file.exists(tmp)) file.remove(tmp)
trimws(dataString)
}
rawString(sc)
#[1] "Java ref type org.apache.spark.api.java.JavaSparkContext id 0"
rawString(myFunc)
#[1] "function(x) { x + 1}"
但是,我希望避免写入和读取依赖sink()
的文件和。有没有办法获得像REPL打印出来的字符串表示?
答案 0 :(得分:2)
试试capture.output
。它基本上是你的rawString
,但内置了。
capture.output(myFunc)
[1] "function(x) { x + 1}"
不幸的是,我无法代表sparkTable
,因为我没有。
您可能还会考虑使用?dput
,这是为用户提供复制粘贴到其控制台以重新创建变量的好方法,但不会转换为字符串(例如dput(iris)
- - &gt;如果我将它复制粘贴到我的终端,我会得到你所得到的。