将任何 R 变量的值转换为字符串
Convert any R variable's value to string
来自 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 打印出来的字符串表示形式?
尝试capture.output
。它本质上是您的 rawString
,但已内置。
capture.output(myFunc)
[1] "function(x) { x + 1}"
不幸的是我不能代表 sparkTable
因为我没有。
您也可以考虑 ?dput
,这是一种很好的方式,可以让用户复制粘贴到他们的控制台以重新创建您的变量,但不会转换为字符串(例如 dput(iris)
--> 如果我将其复制粘贴到我的终端中,我会得到你所得到的)。
来自 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 打印出来的字符串表示形式?
尝试capture.output
。它本质上是您的 rawString
,但已内置。
capture.output(myFunc)
[1] "function(x) { x + 1}"
不幸的是我不能代表 sparkTable
因为我没有。
您也可以考虑 ?dput
,这是一种很好的方式,可以让用户复制粘贴到他们的控制台以重新创建您的变量,但不会转换为字符串(例如 dput(iris)
--> 如果我将其复制粘贴到我的终端中,我会得到你所得到的)。