Process one list each element according to corresponding position of other same length list
I have two lists, lista and listb,
lista contains three elements, each of their class() is frame:
frame1, frame2, frame3. Each frame nrows = 50, ncols = 100
listb contains three elements, each of their class() is numeric:
vector1, vector2, vector3. Each vector length is 50
I want to do
vector1 replace the 100th col (last column) of frame1,
vector2 replace the 100th col of frame2,
vector3 replace the 100th col of frame3.
How can I realize is not by for cycle use R? Many thanks! I search this question for several hours,but seems no similar can be reference.
yes,for R, it's
lista[[1]][, 100] <- listb[[1]]
lista[[2]][, 100] <- listb[[2]]
lista[[3]][, 100] <- listb[[3]]
here 1,2,3 is toy example, what I will process more than 200
• 1,480 views
•
link
1 answer
We can use mapply, see this example:
# example data
set.seed(1);lista <- list(frame1 = data.frame(x = letters[1:2], y = runif(2)),
frame2 = data.frame(x = letters[3:4], y = runif(2)),
frame3 = data.frame(x = letters[5:6], y = runif(2)))
listb <- list(c(1, 11), c(2, 22), c(3, 33))
lista
# $frame1
# x y
# 1 a 0.2655087
# 2 b 0.3721239
#
# $frame2
# x y
# 1 c 0.5728534
# 2 d 0.9082078
#
# $frame3
# x y
# 1 e 0.2016819
# 2 f 0.8983897
listb
# [[1]]
# [1] 1 11
#
# [[2]]
# [1] 2 22
#
# [[3]]
# [1] 3 33
mapply(function(x, y){
x[ ncol(x) ] <- y # Assign y to the last column, in your case ncol(x) will return 100.
x},
lista, listb, SIMPLIFY = FALSE)
# $frame1
# x y
# 1 a 1
# 2 b 11
#
# $frame2
# x y
# 1 c 2
# 2 d 22
#
# $frame3
# x y
# 1 e 3
# 2 f 33
• 1 views
•
link
Log in to answer this question.
Can you explain how this is related to bioinformatics? If not it will be closed and it would be better if you try on StackOverflow
Thank you for reminding me. Actually, the last col is coverage value of each position on chromosome, but I should mapping this value to same scale so each sample can be compared when they are visualized. Now is let the transfered value to replace raw value.
I don't fully understand what you want to do, something like this ?