举例来说,我有一个数据列name
,其中包含:n
,mean
和sd
。如何提取列表的元素,然后将其保存到单个rda
文件中。该文件应包含生成的数据集而不是列表。
random.r <- function(df, filename) {
save.random <- function(name, n, mean, sd) {
rn <- rnorm(n=n, mean=mean, sd=sd)
assign(deparse(name), rn)
}
rlist <- sapply(1:nrow(df), function(x)
save.random(df$name[x], df$n[x],df$mean[x],df$sd[x],simplify = FALSE))
save(list = rlist, file = paste(filename,".Rda",sep=""), envir = .GlobalEnv)
}
干杯
诀窍是告诉R在哪里可以找到中提到的对象save
。为此,请提供列表本身作为环境:
save(list=names(rlist), file=..., envir=as.environment(rlist))
还要注意,它list
必须是对象名称的向量,所以它应该是names(rlist)
(而不是简单地)rlist
,因为后者是数字向量的列表。
以下是对的修改random.r
,可以按预期工作。在本文的结尾,我还将提供简化的代码以实现相同的目的。
random.r <- function(df, filename) {
save.random <- function(name, n, mean, sd) {
rnorm(n=n, mean=mean, sd=sd)
}
rlist <- setNames(lapply(1:nrow(df), function(x) {
save.random(df$name[x], df$n[x], df$mean[x], df$sd[x])
}), df$name)
save(list = names(rlist), file = paste0(filename, ".rda"),
envir = as.environment(rlist))
}
上面的关键更改是将names(rlist)
要保存的元素名称的列表(向量)的规范,以及as.environment(rlist)
R希望在其中搜索具有这些名称的对象的环境。另请注意,我曾经setNames
正确地将的元素分配df$name
为的结果元素的名称rlist
。
简化版本为:
rlist <- setNames(mapply(rnorm, d$n, d$mean, d$sd), d$name)
save(list=names(rlist), file='~/../Desktop/foo.rda',
envir=as.environment(rlist))
d
你在哪儿data.frame
?这mapply
是一个方便的快捷方式;它逐步遍历向量d$n
,d$mean
并d$sd
同时执行rnorm
每次。
如果需要,当然可以将简化的代码包装到一个函数中,例如:
f <- function(x, filename) {
rlist <- setNames(mapply(rnorm, x$n, x$mean, x$sd), x$name)
save(list=names(rlist), file=paste0(filename, '.rda'),
envir=as.environment(rlist))
}
d <- data.frame(name=LETTERS, n=sample(100, 26), mean=runif(26), sd=runif(26),
stringsAsFactors=FALSE)
f(d, '~/../Desktop/foo')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句