繁体   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