这可能是不可能的但是让我试试......
是否可以编写此功能?
Foo<-function(n){
X=runif(n)
write.csv(X,file=paste([the name of the assignment target],".csv",sep="")
}
所以当我这样做时
ABC<-Foo(10)
它生成10个随机数,并将它们存储到R对象ABC并写入一个名为“ABC.csv”的csv文件?
我知道你可以这样做:
Foo2<-function(n,name){
X=runif(n)
write.csv(X,file=paste(name,".csv",sep=""))
assign(name,X,envir=.GlobalEnv)
}
Foo2(10,"ABC")
但是我想使用箭头运算符&lt; - 因为它是R中的常用语法。所以Foo2真的不完美。当然还有
ABC<-Foo2(10,"ABC")
没有意义,因为它意味着输入两次名称。
答案 0 :(得分:4)
如果我们稍微改变语法,我们就可以做到。首先定义:
Random <- structure(NA,class="Random")
"$<-.Random" <- function(x, name, value) {
X <- runif(value)
write.csv(X, file = paste0(name, ".csv"))
assign(name, X, parent.frame())
invisible(x)
}
这是这样使用的:
Random$abc <- 3
之后abc
将是生成数字的向量,并且将写出abc.csv
文件。
答案 1 :(得分:3)
我认为你不能覆盖<-
,但你可以制作自己的二元函数%<-%
Foo <- function(n){
runif(n)
}
`%<-%` <- function(x, y){
xname <- as.character(substitute(x))
assign(xname, y, envir = .GlobalEnv)
write.csv(y, file = paste0(xname, ".csv"))
}
和一个例子
> dir()
character(0)
> ls()
[1] "%<-%" "Foo"
> x %<-% Foo(3)
> x
[1] 0.1838146 0.6785800 0.3758954
> read.csv("x.csv")
X x
1 1 0.1838146
2 2 0.6785800
3 3 0.3758954