以下是使用sapply的两个示例,第一个示例有效但第二个示例在x为大数时生成NA。有人可以帮忙吗?
这有效x = 1:10
y = 5:15
sapply(x, function (i) min(abs(x[i]-y)))
但这不起作用
x = 100000:100010
y = 5:15
sapply(x, function (i) min(abs(x[i]-y)))
答案 0 :(得分:1)
在使用i
时,您需要在X
sapply
参数中使用序列。
就像在i
循环
for
一样
> x <- 1:10
> y <- 5:15
> sapply(seq_along(x), function(i) min(abs(x[i] - y)))
# [1] 4 3 2 1 0 0 0 0 0 0
> x <- 100000:100010
> y <- 5:15
> sapply(seq_along(x), function(i) min(abs(x[i] - y)))
# [1] 99985 99986 99987 99988 99989 99990 99991 99992 99993 99994 99995
答案 1 :(得分:1)
sapply
中内联函数中的参数是第一个参数的每个值插入的内容,所以在你的情况下x [i]不使用i从1到10或者其他什么,但我来自x [1]到x [结束]。
sapply(x,function(i) min(abs(i-y)))
您正在尝试做的事情(取x
的每个元素并从中减去y。)
> x = 100000:100010
> y=5:15
> sapply(x,function(i) min(abs(i-y)))
# [1] 99985 99986 99987 99988 99989 99990 99991 99992 99993 99994 99995