R的问题'data'必须是矢量类型,'NULL'



我创建了这个函数:

vlw=function(x,y)
{
for(i in 0:20){
if((i>=1)&(i<=4)|(i>=6)&(i<=9)|(i>=11)&(i<=14)|(i>=16)&(i<=19))
{
next()
}
print(ifelse((x<i)&(y<i)|(x>(i+5))&(y>(i+5)),0,ifelse((x<i)&(y<(i+5)),(y-i)/5,ifelse((x<(i+5))&(y>(i+5)),(i+5-x)/5,ifelse((x>i)&(y<(i+5)),(y-x)/5,1)))))
}
}

如果我使用这个估算:

iv=c(-1,-2,4,9,10,5,-1)
fv=c(3,-1,6,10,11,10,8)

我的结果是:

[1] 0.6 0.0 0.2 0.0 0.0 1.0 1.2
[1] 0.0 0.0 0.2 1.0 1.0 1.0 0.6
[1] 0 0 0 0 1 0 0
[1] 0 0 0 0 0 0 0
[1] 0 0 0 0 0 0 0

问题是我想从这个结果创建一个矩阵,但是当我把:

exp4=as.matrix(vlw(iv,fv),5,7)

我读了这个错误:

array(x, c(length(x(, 1L( 中的错误, if (!is.null(names(x((( list(names(x(, : "数据"必须是向量类型,为 "空">

你知道我该怎么解决吗?

下面是一个更简单的示例,可以更清楚地解释该问题:

f = function() {
for (i in 1:2) {
if (i==2) next()
print (i)
}
}
x = f()
# [1] 1
x
# NULL

本质上,该函数将返回上次计算的任何表达式。 在这种情况下next().next返回的值为NULL。 因此,当您分配f()的结果时,它将具有值NULL

与其在函数中使用print,不如用正在打印的值填充向量,并返回此向量。

喜欢这个:

vlw=function(x,y)
{
output=c()
for(i in 0:20) {
if((i>=1)&(i<=4)|(i>=6)&(i<=9)|(i>=11)&(i<=14)|(i>=16)&(i<=19))
{
next()
}
output =c(output,
ifelse((x<i)&(y<i)|(x>(i+5))&(y>(i+5)),0,ifelse((x<i)&(y<(i+5)),(y-i)/5,ifelse((x<(i+5))&(y>(i+5)),(i+5-x)/5,ifelse((x>i)&(y<(i+5)),(y-x)/5,1))))
)
}
return(output)
}

exp4 = matrix(vlw(iv,fv),5,7)
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,]  0.6  1.0  1.0    0    0    0    0
#[2,]  0.0  1.2  1.0    0    0    0    0
#[3,]  0.2  0.0  1.0    0    0    0    0
#[4,]  0.0  0.0  0.6    1    0    0    0
#[5,]  0.0  0.2  0.0    0    0    0    0

相关内容

  • 没有找到相关文章

最新更新