2015-01-27 3 views
0

Я создал эту функцию в R, но вывод, который должен быть сохранен в каталоге, не является ожидаемым. Когда я печатаю переменную i, она всегда имеет значение 1, поэтому имя файлов, которые я сохраняю, всегда те, что у меня есть на первой позиции вектора.Сохранение внутри функции в R

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) 

Спасибо.

+0

Я не вижу, где вы назначаете 'i' первоначально в функции. Ожидаете ли вы, что для каждого объекта в 'data' будет другое значение' i'? Если это так, вы можете посмотреть в 'seq_along (data)' и передать объект данных своей функции в качестве другого аргумента. – jraab

+0

Это должно быть в начале работы. Я не помещал его здесь, кроме исходного кода. i = 1 – biorunner88

+0

Проблема заключается в том, что 'i' заменяется только локально на функцию' function_filtering', поэтому присваивание 'i <- i + 1' не влияет на глобальное значение' i'. Чтобы выполнить глобальное присвоение, используйте 'i << - i + 1'; что эта реализация довольно неуклюжая, и это может быть хорошей идеей сделать это в цикле (например, что-то, что пересекает значения вектора значений «x»). – tkmckenzie

ответ

0

Без воспроизводимого примера я не могу решить вашу проблему. Но я думаю, что это то, к чему вы стремились.

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" 
Смежные вопросы