我的问题似乎很容易,但不知怎的,我没有遇到一个合适的解决方案。我想用R中的值(0)替换R中列表(!)中的所有负值。
对于矢量或矩阵,这很容易:
matrixx <- as.matrix(rnorm(20,0,0.5))
matrixx[matrixx<0] <- 0
但是当我尝试将它应用于列表(具有不同的长度,所有条目都是数字)时,它返回:
(list)对象无法强制输入'double'
我试过了unlist(x)
,但这似乎也不能完成。我错过了什么?
以下是示例数据集:
dummy_list <- list(0)
dummy_list[[1]] <- c(-0.5, 0, 0.5, 1.0, 1.5, 2.0)
dummy_list[[2]] <- c(-5, -2, 10)
感谢您的帮助!
答案 0 :(得分:6)
使用lapply
将(匿名)函数应用于列表的每个元素。
示例数据:
> l <- list(x=rnorm(5), y=rnorm(3))
> l
$x
[1] 0.2682050 0.9015505 -0.8334734 1.3497408 1.9482120
$y
[1] -1.92907352 -0.24787634 -0.08115765
然后:
> lapply(l, function(v) {v[v<0] <- 0; v} )
$x
[1] 0.2682050 0.9015505 0.0000000 1.3497408 1.9482120
$y
[1] 0 0 0