使用带 lapply 的 dput 函数
using the dput function with lapply
是否可以在循环中使用 dput 而不会在每次迭代中覆盖文件,即
f<-function(x){
dput(x,file="sample.R")
}
lapply(data,function(y) {f(y)})
可以这样做,但是您需要提供一个在 append
模式下打开的连接。
data <- list(1:10, c(1,2,3))
fcon <- file('sample.R', 'a')
lapply(data, dput, file = fcon)
close(fcon)
> readLines('sample.R')
[1] "1:10" "c(1, 2, 3)"
如果您查看 dput
来源,原因就很清楚了:
> dput
function (x, file = "", control = c("keepNA", "keepInteger",
"showAttributes"))
{
if (is.character(file))
if (nzchar(file)) {
file <- file(file, "wt")
on.exit(close(file))
}
else file <- stdout()
...
}
我们可以看到,如果 file
参数是字符,文件连接将以 write
模式打开,现有内容将被覆盖。
在任何情况下,如评论中所建议的,使用 dump
更简单,因为 dump
有一个 append
参数,它决定连接将以何种模式打开.
> dump
function (list, file = "dumpdata.R", append = FALSE, control = "all",
envir = parent.frame(), evaluate = TRUE)
{
if (is.character(file)) {
...
if (nzchar(file)) {
file <- file(file, ifelse(append, "a", "w"))
on.exit(close(file), add = TRUE)
}
else file <- stdout()
}
...
}
是否可以在循环中使用 dput 而不会在每次迭代中覆盖文件,即
f<-function(x){
dput(x,file="sample.R")
}
lapply(data,function(y) {f(y)})
可以这样做,但是您需要提供一个在 append
模式下打开的连接。
data <- list(1:10, c(1,2,3))
fcon <- file('sample.R', 'a')
lapply(data, dput, file = fcon)
close(fcon)
> readLines('sample.R')
[1] "1:10" "c(1, 2, 3)"
如果您查看 dput
来源,原因就很清楚了:
> dput
function (x, file = "", control = c("keepNA", "keepInteger",
"showAttributes"))
{
if (is.character(file))
if (nzchar(file)) {
file <- file(file, "wt")
on.exit(close(file))
}
else file <- stdout()
...
}
我们可以看到,如果 file
参数是字符,文件连接将以 write
模式打开,现有内容将被覆盖。
在任何情况下,如评论中所建议的,使用 dump
更简单,因为 dump
有一个 append
参数,它决定连接将以何种模式打开.
> dump
function (list, file = "dumpdata.R", append = FALSE, control = "all",
envir = parent.frame(), evaluate = TRUE)
{
if (is.character(file)) {
...
if (nzchar(file)) {
file <- file(file, ifelse(append, "a", "w"))
on.exit(close(file), add = TRUE)
}
else file <- stdout()
}
...
}