簡體   English   中英

從R中的另一個列表中減去列表元素

[英]Subtracting list elements from another list in R

我有兩個列表,我想用另一個列表元素明智地減去一個列表元素,以便復制 Matlab 函數bsxfun(@minus, lt, lt2) 這兩個列表如下所示(編輯:現在可以在沒有 pracma 包的情況下使用):

# Code 

# First list
lt = c(list())

# I use these lines to pre-dim the list...
lt[[1]] = c(rep(list(1)))
lt[[2]] = c(rep(list(1)))

# ... such that I can add matrices it this way:
lt[[1]][[1]] = matrix(c(3),nrow=1, ncol=1,byrow=TRUE)
lt[[2]][[1]] = matrix(c(1),nrow=1, ncol=1, byrow=TRUE)

# Same with the second list:
lt2 = c(list())
lt2[[1]] = c(rep(list(1)))
lt2[[2]] = c(rep(list(1)))

lt2[[1]][[1]] = matrix(c(2,2,2),nrow=3, ncol=1,byrow=TRUE)
lt2[[2]][[1]] = matrix(c(1,1,1),nrow=3, ncol=1,byrow=TRUE)

逐元素減法意味着lt2的元素的每一行將被對象lt的相應元素減去,即 lt2[[1]][[1]] 每行減去 3,得到 t(c( -1 -1 -1)).... 和 lt2[[2]][[1]] = t(c(0,0,0)) by 1 ... 列表結構對我來說很重要保留在結果中。

現在我嘗試使用lapply(lt2,"-",lt)但它不起作用。 有什么建議么?

我懷疑您正在尋找類似這樣的骨架代碼,它按元素減去 2 個列表...

x <- list(1,2,3)
y <- list(4,5,6)
mapply('-', y, x, SIMPLIFY = FALSE)

但如前所述,您需要 2 個相同的列表(或者至少 R 的回收算法必須有意義),例如...

z <- list(4,5,6,7,8,9)
mapply('-',z,x,SIMPLIFY = FALSE)

您可能正在尋找這樣的東西,從列表的每個成員中減去一個常數......

mapply('-',y,2, SIMPLIFY= FALSE)

我想通了 - 我在這個問題上有另一個錯誤:/

將第二類更改為.numeric 有效

lt3 = lapply(lt2[[1]],"-",as.numeric(lt[[1]]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM