功能不打印到for循环内的控制台
我有一个六列的数据框。当我在R脚本中编写并运行它时:功能不打印到for循环内的控制台,r,R,我有一个六列的数据框。当我在R脚本中编写并运行它时: any(is.na(df[ , 1])) 我在控制台窗口中准确地返回了预期的输出。这适用于六列中的任何一列 但是,当我尝试通过函数检查所有六列时,如下所示: for (i in 1:6){ any(is.na(df[ , i])) } 控制台窗口中显示的所有内容如下: > for (i in 1:6){ + any(is.na(df[ , i])) + } 我觉得好像我遗漏了一些关键的小信息,但我无法通过我遇到的在线文档
any(is.na(df[ , 1]))
我在控制台窗口中准确地返回了预期的输出。这适用于六列中的任何一列
但是,当我尝试通过函数检查所有六列时,如下所示:
for (i in 1:6){
any(is.na(df[ , i]))
}
控制台窗口中显示的所有内容如下:
> for (i in 1:6){
+ any(is.na(df[ , i]))
+ }
我觉得好像我遗漏了一些关键的小信息,但我无法通过我遇到的在线文档来理解它。试着打印一些输出。目前,你的R代码没有吐出任何东西。您在控制台中看到的是正确的
for (i in 1:6){
print(any(is.na(df[ , i])))
}
您没有存储或打印结果。你认为会发生什么?这是一个完全合理的问题。在命令行中键入
any(is.na(df[,1]))
将生成[1]FALSE
。运行上面的循环不会生成任何输出。不知道为什么,除非你知道答案,而且这方面的文档很差。在循环和脚本中,您需要使用显式发送到输出,例如print(…)
。更像R的代码将使用apply
样式循环,例如sapply(mtcars,function(x)any(is.na(x))
。或者使用更多的函数编程:library(functional);sappy(mtcars,Compose(is.na,any))
。这种函数式风格在R中运行得非常好,导致代码非常简短。如果您只是深入研究R,我绝对建议您从函数的角度来学习R,即使用*apply
样式循环等等。参见例如:@Paul Hiemstra:Great link。谢谢