我想知道在R中是否可以使用在函数调用中声明的值作为函数本身的“变量”部分,类似于SAS IML中可用的功能。
考虑到这样的事情:
put.together <- function(suffix, numbers) {
new.suffix <<- as.data.frame(numbers)
return(new.suffix)
}
x <- c(seq(1000,1012, 1))
put.together(part.a, x)
new.part.a ##### does not exist!!
new.suffix ##### does exist
在编写时,该函数返回一个名为new.suffix
的数据帧,因为它应该是我要求它做的。
我想获得一个名为new.part.a
的数据帧。
编辑:要求提供有关分析目的的其他信息
问题的目的是生成将被发送到另一个函数进行分析的数据帧。
存在一个数据库,其中元素按编号分组,其他人组织这些组 成为一个有意义的集。
每个组都有一个ID号。我使用其他人提供的信息将这些组放在一起,因为它们已被指定。
例如,我将获得一组身份证号码:part-1 = 102263,102338,202236,302342,902273,102337,402233。
因此,第1部分有7个组,每个组有几个元素。
我在合并中使用id号码,以便只从大数据库中提取感兴趣的组。
以下是我对一套的内容:
### all.possible.elements.bank <- .csv file from large database ###
id.part.1 <- as.data.frame(c(102263, 102338, 202236, 302342, 902273, 102337, 402233))
bank.names <- c("bank.id")
colnames(id.part.1) <- bank.names
part.sort <- matrix(seq(1,nrow(id.part.1),1))
sort.part.1 <- cbind(id.part.1, part.sort)
final.part.1 <- as.data.frame(merge(sort.part.1, all.possible.elements.bank,
by="bank.id", all.x=TRUE))
上述过程重复了很多次。
我知道我可以为所有收集到的集合执行此操作,但我认为我可以将选择过程包装到函数中。唯一可以改变的是部件号(第1部分,第2部分等等)和被选中的组。
答案 0 :(得分:4)
可以使用assign
函数(可能还有deparse
和substitute
),但强烈建议您不要这样做。为什么不能只返回数据框并调用函数,如:
new.part.a <- put.together(x)
哪种方法通常更好。
如果您真的想要在全球环境中更改内容,那么您可能需要一个宏,请参阅defmacro
包中的gtools
函数,最重要的是阅读帮助中的参考文档中的文档页。
答案 1 :(得分:1)
这很少是你想要做的事情......在功能环境中分配东西会让你遇到各种各样的麻烦。
但是,您可以使用assign
:
put.together <- function(suffix, numbers) {
assign(paste('new',
deparse(substitute(suffix)),
sep='.'),
as.data.frame(numbers),
envir=parent.env(environment()))
}
put.together(part.a, 1:20)
但是像Greg说的那样,它通常没有必要,如果使用不正确,总是很危险。