0
私は行列のリストを持っています。彼らは特定の列名を持っている場合は、行列の負の要素をゼロに変更したい。以下の例では、列名 'a'がゼロに等しい要素を設定したいと考えています。R行列のリスト - 値と列の名前に基づいて値を変更します
> set.seed(4)
> z<-lapply(1:3, function(x) matrix(sample(-10:10,20, replace=T), nrow=4))
> z<-lapply(z, function(x) {colnames(x)<-c("a","c","b","a","b");x})
> z
[[1]]
a c b a b
[1,] 2 7 9 -8 10
[2,] -10 -5 -9 10 2
[3,] -4 5 5 -2 10
[4,] -5 9 -4 -1 5
[[2]]
a c b a b
[1,] 5 3 0 8 -1
[2,] 10 7 1 3 3
[3,] 0 0 1 0 -2
[4,] 0 7 -5 10 -10
[[3]]
a c b a b
[1,] 9 8 5 8 -7
[2,] -5 -9 1 6 -7
[3,] 1 8 -2 7 8
[4,] -7 8 5 -2 5
これは私がしようとしていたものです。
[[1]]
a c b a b
[1,] 2 7 9 0 10
[2,] 0 -5 -9 10 2
[3,] 0 5 5 0 10
[4,] 0 9 -4 0 5
[[2]]
a c b a b
[1,] 5 3 0 8 -1
[2,] 10 7 1 3 3
[3,] 0 0 1 0 -2
[4,] 0 7 -5 10 -10
[[3]]
a c b a b
[1,] 9 8 5 8 -7
[2,] 0 -9 1 6 -7
[3,] 1 8 -2 7 8
[4,] 0 8 5 0 5
私はこれを試してみましたが、他の要素を台無しにするように見えました。
> keeper<-which(colnames(z[[1]])=="a")
> lapply(z, function(x) {x[x[,keeper]<0]<-0;x})
[[1]]
a c b a b
[1,] 2 0 9 0 10
[2,] 0 -5 0 10 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[[2]]
a c b a b
[1,] 5 3 0 8 -1
[2,] 10 7 1 3 3
[3,] 0 0 1 0 -2
[4,] 0 7 -5 10 -10
[[3]]
a c b a b
[1,] 9 8 5 8 -7
[2,] 0 -9 0 6 0
[3,] 1 8 -2 7 8
[4,] 0 0 0 0 0
'のX [X [、キーパー] <0、キーパー] < - 0 '私は、このエラーが発生します – Roland
@Roland:' [< - '( '* TMP *'、X [、キーパーでエラーが発生しました] <0、キーパー、値= 0): (下付き文字)論理添字が長すぎます – user3390169