当在R中使用大量数字时,Sapply产生NA

时间:2014-09-19 17:22:23

标签: r sapply

以下是使用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)))

2 个答案:

答案 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