全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1248 8
2019-12-17
各位师兄,昨晚有时间看了下R函数编程,遇到个问题,是否可以解答下,问题是这样的:
一个数据文件,如下所示,使用-99 表示缺失值。 我想把所有的-99都替换成 NA,
于是编个简单的函数实现:
f <- function(x) {
x[x == -99] <- NA
}
假如产生数据:
set.seed(1014)
df <- data.frame(replicate(6, sample(c(1:10, -99), 6, rep = TRUE)))
names(df) <- letters[1:6]
但应用上述函数df$d<-f(df$d)得到d列全部是NA.
我用C语言同样的方法会得到正确的结果。why?

二维码

扫码加我 拉你入群

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

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

全部回复
2019-12-17 19:50:48
你的函数f返回值是NA,请把函数改为
复制代码
二维码

扫码加我 拉你入群

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

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

2019-12-18 08:34:04
megapanda 发表于 2019-12-17 19:50
你的函数f没有返回值,请把函数改为
按你讲的方法确实可以了。但请问一下,函数一定要有返回值吗?我运用语句x[x==-99]<-99明明已经赋值了,按道理相应的位置是NA,其它位置不变啊。求解?
二维码

扫码加我 拉你入群

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

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

2019-12-18 08:37:03
megapanda 发表于 2019-12-17 19:50
你的函数f没有返回值,请把函数改为
另外,如果没有显示返回值,R不是默认最后一句(这里是x[x==-99]<-NA)为返回值吗?
二维码

扫码加我 拉你入群

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

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

2019-12-18 12:59:56
maiweijie4321 发表于 2019-12-18 08:37
另外,如果没有显示返回值,R不是默认最后一句(这里是x[x==-99]
第1个问题,x[x == -99] <- NA 的赋值是在函数中完成的,您可以简单理解为两者所处的环境(environment)不同。而在函数环境的变量值改变,不会影响全局环境的变量(除非该变量没有在函数中定义);

第2个问题,我之前的描述确实有点问题,
R的确将函数的最后一句作为返回值,但最后一句(x[x==-99] <- NA)的值是NA ,您可以尝试在控制台执行
    print(x[x==-99] <- NA)
将会打印出NA而不是x
二维码

扫码加我 拉你入群

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

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

2019-12-18 14:29:16
megapanda 发表于 2019-12-18 12:59
第1个问题,x[x == -99]
有点明白了。多谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群