R如何记住哪些值被索引?

时间:2018-03-22 08:42:37

标签: r indexing

代码:

x <- c(1, 1, 3, 2, 3, 5)   
x[x < 3] <- x[x <  3]  *  100  
x

输出:

[1]  100  100    3  200    3    5

我希望获得输出“[1] 100 100 200”。 R如何记住x < 3?所在的索引因为在运行x[x < 3]时,您得到输出“1,1,2”(这些数字的索引是1,2,4)

因此,R记住x < 3所在的值,并操纵这些值。但是R如何知道这些值的索引?

4 个答案:

答案 0 :(得分:2)

如果您想获得通话结果,则需要将其分配给新变量:

x2 <- (x[x < 3] <- x[x<3] * 100) 
x2
#[1] 100 100 200

请注意x仍会更改(由于您的作业x[x < 3] <- x[x<3] * 100) 如果不需要,您可以这样做:

x2 <- x[x<3]*100
x2
#[1] 100 100 200
x
#[1] 1 1 3 2 3 5

答案 1 :(得分:1)

如果你看看什么是x&lt; 3你会发现它产生了

[1]  TRUE  TRUE FALSE  TRUE FALSE FALSE

所以x[x<3] <- x[x < 3] * 100表示将x(x[x < 3]*100)的第一个,第二个和第四个值乘以100,并用这些新值替换x的第一个,第二个和第四个值(x[x<3] <- )。

答案 2 :(得分:1)

它不记得x < 3值的位置。等式的左侧明确指出x < 3值的位置。

所以右边的东西可能是(100, 100, 200),但左边的东西是第1,2和4位的占位符

答案 3 :(得分:1)

在您的代码中,您要求R转到x,并将此代码3100的每个值小于x[x < 3]*100。在这种情况下,R会查找元素的位置。也就是说,代码转到x值并逐个获取它们。然后,服从该条件的人乘以100。然后,代码返回x的所有值。正确的方法是为@Cath答案指定特定值的名称。

此外,为方便起见,编写一般功能是个好主意。这是一个功能。

myfun <- function(x, n){

res <- lapply(x, function(i) (if (i < n) {i *100}else{0}))
res
}

或只是使用@Cath的评论。

myfun <- function(x, n){

res <- x[x < n]*100
res
}

myfun(x, 3)

x <- list(1, 1, 3, 2, 3, 5)  
n=3

然后,

 > myfun(x, 3)
[[1]]
[1] 100

[[2]]
[1] 100

[[3]]
[1] 0

[[4]]
[1] 200

[[5]]
[1] 0

[[6]]
[1] 0