代码:
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如何知道这些值的索引?
答案 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
,并将此代码3
中100
的每个值小于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