楼主: kaifengedu
6192 5

[问答] 在ifelse语句中sqrt函数的问题 [推广有奖]

  • 0关注
  • 18粉丝

已卖:641份资源

学科带头人

4%

还不是VIP/贵宾

-

威望
0
论坛币
1671 个
通用积分
475.1680
学术水平
85 点
热心指数
128 点
信用等级
60 点
经验
32847 点
帖子
913
精华
0
在线时间
1638 小时
注册时间
2010-2-2
最后登录
2025-12-27

楼主
kaifengedu 发表于 2014-2-5 16:24:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位好,如下语句
  1. x.values <- seq(-2, 2, by = 0.1)
  2. x <- x.values
  3. y.values <- ifelse(x <= 0, -x^3, ifelse(x <= 1, x^2, sqrt(x)))
复制代码

就会产生如下错误:

Warning message:In sqrt(x) : NaNs produced
如果使用



  1. x.values <- seq(-2, 2, by = 0.1)
  2. x <- x.values
  3. y.values <- ifelse(x <= 0, -x^3, ifelse(x <= 1, x^2, (x)^(1/2)))
复制代码

就没有问题。

能否解释一下为什么,谢谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:else ELS LSE values value

已有 1 人评分热心指数 收起 理由
耕耘使者 + 1 鼓励积极发帖讨论

总评分: 热心指数 + 1   查看全部评分

沙发
耕耘使者 发表于 2014-2-5 16:43:19
有意思,同问。

藤椅
jmpamao 发表于 2014-2-5 17:16:08
ifelse语句 是向量化运算,看代码 rep(...)[...],
当 x < 0 时,sqrt(x) 会出现警告出现 NaN.
而 x^0.5, 会直接NaN, 不会警告。

在向量运算时,都进行计算, 取值时,只取逻辑是(那些NaN都值就替掉了)个人认为,欢迎补充。

过年来论坛打打酱油,
        烧五花肉了。。。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
intchen 发表于 2014-2-5 17:24:51
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
kaifengedu 发表于 2014-2-5 18:36:23
谢谢楼上两位,新年快乐。

地板
jmpamao 发表于 2014-2-5 19:50:17
ifelse(x <=1, x^2, sqrt(x))
##or
ifelse(x <=1, x^2,x^0.5)

##那个ifelse语句可以表示为下面向量的形式
ans <- NULL ##or  ans <- x <=1
ans[x<=1] = rep(x^2,length.out=length(x<=1))[x<=1]
ans[!x<=1] = rep(x^0.5,length.out=length(x<=1))[!x<=1]
ans

##再看看 rep(x^0.5...当x<0,x^0.5有NaN,不警告, 而sqrt(x),会警告,本质没有区别。
rep(x^0.5,lenght.out=length(x<=1))
##or
rep(sqrt(x),length.out=length(x<=1))

###具体看 ifesle 代码。感觉ifelse 的效率不会比 常用的 if .. else...效率高。
###新年第一帖,认真图个吉利。大家马年吉祥。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 05:14