【发布时间】: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 <- i + 1不会影响i的全局值。要进行全局分配,请使用i <<- i + 1;也就是说,这个实现非常笨拙,最好在一个循环中执行此操作(例如,循环遍历x值的向量的值)。