在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
什么可能的解决方案呢?谢谢。
答
这是不可能的,返回一个向量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
河套的Map
的ifelse
或sapply
, sqrt
已经是矢量化函数等等。 Ìf这是作业,这取决于你已经学到了什么。
我觉得你的老师对你玩的很诡异。在R中,矢量不能是数字和字符类型的混合。或者......也许你需要一位新老师? –
这对R函数来说是一个非常糟糕的要求。该函数的名字很可怕,R中已经存在的函数被忽略,并且它返回一个“字符”向量是非常可怕的。不要做这个运动。你不会学到任何东西。 – nicola
将你的if-else改为ifelse(res rawr