【发布时间】:2013-10-25 14:45:16
【问题描述】:
我想在数据帧列表中将所有 0 更改为 0.0001,以避免在获取日志时使用 -Inf。所以按照Replace all 0 values to NA的指示,我把我的函数写成
set_zero_as_value <- function(x, value=0.0001){
x[x == 0] <- value
}
但是,当我将sapply 用于我的数据sapply(a,set_zero_as_value) 时,结果返回为
s1 s2
1e-04 1e-04
进一步检查列表 a,a 中的 0 完全没有变化。有解决办法吗?
PS:列表a可以创建为
> a = NULL
> a$s1 = rbind(cbind(0,1,2),cbind(3,4,5))
> a$s2 = rbind(cbind(0,1,2),cbind(3,4,5))
【问题讨论】:
-
你的函数需要返回
x。 -
并且(希望我不需要指出这一点)您需要将结果分配给某些东西,例如
a <- sapply(a,set_zero_as_value) -
所以我必须分配结果?我可以简单地修改一个吗,因为如果数据帧非常大,就会有冗余。或者我稍后再回复。
-
@lolibility 使用
data.table包中的data.table来通过引用。 R 显然是 pass-by-value 并且将对您使用的几乎所有对象执行 copy-on-modify。