Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R规划中的向量与函数_R_Vectorization - Fatal编程技术网

R规划中的向量与函数

R规划中的向量与函数,r,vectorization,R,Vectorization,下面有一个函数,可以得到一个数的平方根。然而,我有一个向量,我试图传入,但它只接受第一个元素,并给我一个“不可能”的输出。有没有人知道我能为这个函数做些什么来获取我的第二个数字,并给我一个“不可能不可能”的输出。谢谢大家! getRootNotVectorized <- function(x){ if(x<0) return("not possible") else return( sqrt(x)) } getRo

下面有一个函数,可以得到一个数的平方根。然而,我有一个向量,我试图传入,但它只接受第一个元素,并给我一个“不可能”的输出。有没有人知道我能为这个函数做些什么来获取我的第二个数字,并给我一个“不可能不可能”的输出。谢谢大家!

getRootNotVectorized <- function(x){
    if(x<0)
        return("not possible") else
            return( sqrt(x))
}

getRootNotVectorized(c(-1, -4))
[1] "not possible"

getrootnotvectoriced您可以使用
base
函数
vectorice

getrootVectorized <- Vectorize(getRootNotVectorized)
getrootVectorized(c(-1, -4))
[1] "not possible" "not possible"

getrootVectorized您可以使用
base
函数
vectorize

getrootVectorized <- Vectorize(getRootNotVectorized)
getrootVectorized(c(-1, -4))
[1] "not possible" "not possible"

getrootvectoried您可以将其矢量化:

getRootVectorized <- Vectorize(getRootNotVectorized)
getRootVectorized(c(-1, -4))
# [1] "not possible" "not possible"

虽然
sqrt
基本上已经做到了这一点,但对于小于0的输入返回
NaN
(不是数字)。。。因此,您根本不需要其他函数。

您可以将其矢量化:

getRootVectorized <- Vectorize(getRootNotVectorized)
getRootVectorized(c(-1, -4))
# [1] "not possible" "not possible"

虽然
sqrt
基本上已经做到了这一点,但对于小于0的输入返回
NaN
(不是数字)。。。因此,您根本不需要另一个函数。

您的代码的文字矢量化是:

getRootVectorized <- function(x){
    return(ifelse(x<0,
                  "not possible",
                   sqrt(abs(x))))
                   #The abs is added to surpress warnings for negative values
}
是与以下内容不同的类型:

getRootVectorized(c(1,1))
#[1] 1 1
鉴于:

sqrt(c(-1, 1))
#[1] NaN 1  


返回相同的类型

您的代码的文字矢量化将是:

getRootVectorized <- function(x){
    return(ifelse(x<0,
                  "not possible",
                   sqrt(abs(x))))
                   #The abs is added to surpress warnings for negative values
}
是与以下内容不同的类型:

getRootVectorized(c(1,1))
#[1] 1 1
鉴于:

sqrt(c(-1, 1))
#[1] NaN 1  


返回相同的类型

R是一种矢量化语言,因此您可以执行以下操作:

ifelse(vec_to_sqrt > 0, as.character(sqrt(vec_to_sqrt)), "not possible")
数据:


vec_to_sqrtR是一种矢量化语言,因此您可以执行以下操作:

ifelse(vec_to_sqrt > 0, as.character(sqrt(vec_to_sqrt)), "not possible")
数据:


谢谢你的建议!谢谢你的建议!谢谢你的建议!谢谢你的建议!谢谢你的建议!谢谢你的建议!