在 R 中的函数中保存

Posted

技术标签:

【中文标题】在 R 中的函数中保存【英文标题】:Saving within a function in R 【发布时间】:2015-01-27 17:34:50 【问题描述】:

我在 R 中创建了这个函数,但是应该保存在目录中的输出不是预期的。 当我打印 i 变量时,它的值始终为 1,因此我保存的文件的名称始终是我在向量第一个位置上的名称。

function_filtering <- function(x)

upname <- c("up_toptable_alk.Rda", "up_toptable_kcbc1.Rda",   "up_toptable_kwt.Rda", "up_toptable_NaHog1.Rda", "up_toptable_Nawt.Rda","up_toptable_ox.Rda", "up_toptable_ter.Rda", "up_toptable_ypd.Rda")
downname <- c("down_toptable_alk.Rda", "down_toptable_kcbc1.Rda", "down_toptable_kwt.Rda", "down_toptable_NaHog1.Rda", "down_toptable_Nawt.Rda", "down_toptable_ox.Rda", "down_toptable_ter.Rda", "down_toptable_ypd.Rda")

p.value.cut <- which(x$P.Value < 0.05)
x <- x[p.value.cut,]    

up <- which(x$t > 0)
down <- which(x$t < 0)

up.p.value <- x[up,]
down.p.value <- x[down,]


save(up.p.value, file = upname[i])
save(down.p.value, file = downname[i])


i <- i + 1
print(i)



lapply(data, function_filtering)

谢谢。

【问题讨论】:

我看不到您最初在函数中分配i 的位置。您是否期望data 中的每个对象都有不同的i 值?如果是这样,您可能需要查看 seq_along(data) ,并将数据对象作为另一个参数传递给您的函数。 应该在函数的开头。我没有把它放在这里,但它在原始代码上。 i = 1 问题是i 仅在本地更改为函数function_filtering,因此赋值i &lt;- i + 1 不会影响i 的全局值。要进行全局分配,请使用i &lt;&lt;- i + 1;也就是说,这个实现非常笨拙,最好在一个循环中执行此操作(例如,循环遍历 x 值的向量的值)。 【参考方案1】:

如果没有可重现的示例,我无法解决您的确切问题。但我认为这就是你的目标。

data <- c('a', 'b', 'c', 'd') 
toy <- function(x, d)  
    # x is the integer from seq_along
    # d is the data you want to subset
    paste(x, d[x], sep='_')

# Then use lapply to run the function on each element of data
# extra arguments can be passed in at the end 
lapply(seq_along(data), toy, d=data)

输出是

[[1]]
[1] "1_a"

[[2]]
[1] "2_b"

[[3]]
[1] "3_c"

[[4]]
[1] "4_d"

【讨论】:

以上是关于在 R 中的函数中保存的主要内容,如果未能解决你的问题,请参考以下文章

R中的保存功能

R语言构建xgboost模型:使用xgb.DMatrix保存加载数据集使用getinfo函数抽取xgb.DMatrix结构中的数据

如何在 R 中保存函数的结果而不返回它?

r语言match函数怎么用

写为Stata文件时,R中应用的标签不保存

将存储在列表中的数据帧保存到 R 中的单个文件中