在R中的矢量的平方根

问题描述:

我是R的初学者。努力解决以下问题。在R中的矢量的平方根

创建一个新的R函数getRoot(),它将提供任何 数字的平方根。如果数字是负数,则返回'不可能'。 演示您的功能,使其产生以下输出。

getRoot(C(4,-4,9,-16))= 2 '不可能' 3 '不可能'

我写以下代码:

"getRoot" <- function(x){ 
    res <- as.vector(x) 
    if(res < 0) { 
     cat("not Possible") 
    }else return(sqrt(res)) 
} 

getRoot(c(4,-4,9,-16)) 
[1] 2 NaN 3 NaN 

什么可能的解决方案呢?谢谢。

+3

我觉得你的老师对你玩的很诡异。在R中,矢量不能是数字和字符类型的混合。或者......也许你需要一位新老师? –

+0

这对R函数来说是一个非常糟糕的要求。该函数的名字很可怕,R中已经存在的函数被忽略,并且它返回一个“字符”向量是非常可怕的。不要做这个运动。你不会学到任何东西。 – nicola

+1

将你的if-else改为ifelse(res rawr

这是不可能的,返回一个向量c(4, 'not possible', 3, 'not possible')作为这样一个向量不存在。矢量中的所有元素必须是相同的类型。当然,您可以将数字输出到一起。这是一个简单的练习,可以通过多种方式解决。用于教学目的,我提出以下建议,其中两个问题在一个非常实用的方式分为两种功能:

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

getRoot <- Vectorize(getSingleRoot) 

a <- getRoot(c(4, -4, 9, -16)) 

其他好的解决方案可以利用一个for河套的Mapifelsesapplysqrt已经是矢量化函数等等。 Ìf这是作业,这取决于你已经学到了什么。