R中的误解功能

时间:2018-01-25 22:27:37

标签: r

任何人都可以弄清楚为什么这不起作用?

test<-c(1,2,3,4)

adding<-function(file){
    file2<- file + 1
    return(file2)
}
adding(file = 1)

产量:

> adding(file = 1)
[1] 2

但是当我尝试时:

for(number in test){
    adding(number)
    print(number)
}

我明白了:

> for(number in test){
+     adding(number)
+     print(number)
+ }
[1] 1
[1] 2
[1] 3
[1] 4

当我预料到的时候:

[1] 2
[1] 1
[1] 3
[1] 2
[1] 4
[1] 3
[1] 5
[1] 4

我将这个基础用于我正在研究的另一个for loop并想知道它为什么不起作用。

4 个答案:

答案 0 :(得分:5)

选择

for(number in test){
    print(adding(number))
    print(number)
}

获得预期的行为,否则adding本身不会打印到屏幕上。

答案 1 :(得分:2)

您的示例完全按预期工作。您从未在循环中显式打印函数调用的返回值。循环中关闭自动打印。

答案 2 :(得分:1)

如果您希望将函数的结果应用于向量的每个元素作为向量本身,那么

purrr::map_dbl(test, adding)
## [1] 2 3 4 5

sapply(test, adding)

答案 3 :(得分:0)

在没有print语句的情况下将某些内容打印到屏幕上只发生在交互式环境中,并且只有在大多数scopes内。函数内部的变量有自己的范围,不打印这些变量。

尽管如此:例如,这在MATLAB中是不同的,其中打印了每个语句;结尾的结果。在Python中,另一个要求是单独执行这样的语句。因此,执行两个语句不会打印任何内容,即使最后一个是可能打印的内容。