Мы можем использовать match
, чтобы вернуть индекс первого совпадения в replace
эту позицию с 'xyz'
lapply(list1, function(x) replace(x, match(1, x, nomatch = 0), "xyz"))
#$x
#[1] "xyz" "2" "3" "1" "2"
#$y
#[1] "-1" "-2" "xyz" "2" "1"
Поскольку это list
из vector
с, изменение числового значения c с помощью character
изменяет class
на character
Если у нас есть два списка, то есть один индексный индекс, используйте Map
или mapply
Map(function(x, y) replace(x, y, "xyz"), list1, list2)
Или более компактным способом
Map(`[<-`, list1, list2, "xyz")
#$x
#[1] "xyz" "2" "3" "1" "2"
#$y
#[1] "-1" "-2" "xyz" "2" "1"
Если изменяемые значения также будут другими, это может быть vector
или list
такой же длины, что и другие list
с
Map(`[<-`, list1, list2, c("xyz", "zyx"))