R 如果函数之后至少使用两次,是否在函数内部指定中间结果?

R 如果函数之后至少使用两次,是否在函数内部指定中间结果?,r,R,如果我有一个函数修改它的输入,然后对修改后的对象做两件不同的事情,我应该总是指定中间结果吗 仅举一个在向量上使用gsub并保存两个不同文件的示例, 修改字符向量似乎更快,这个结果可以推广吗 我对函数式编程的印象是修改字符向量2是更干净的方法 library(rbenchmark) modify_character_vector <- function(v) { b <- gsub("a", "b", v) saveRDS(b, "~/filename.rds")

如果我有一个函数修改它的输入,然后对修改后的对象做两件不同的事情,我应该总是指定中间结果吗

仅举一个在向量上使用gsub并保存两个不同文件的示例, 修改字符向量似乎更快,这个结果可以推广吗

我对函数式编程的印象是修改字符向量2是更干净的方法

library(rbenchmark)
modify_character_vector <- function(v) {
    b <- gsub("a", "b", v)
    saveRDS(b, "~/filename.rds")
    saveRDS(b, "~/filename1.rds")
}

modify_character_vector2 <- function(v) {
    saveRDS(gsub("a", "b", v), "~/filename2.rds")
    saveRDS(gsub("a", "b", v), "~/filename3.rds")
}

benchmark(
    "assignment" = {
        v <- rep(letters, 1000)
        modify_character_vector(v)
    },
    "no_assignment" = {
        v <- rep(letters, 1000)
        modify_character_vector2(v)
    },
    replications = 1000
)
库(rbenchmark)

modify_character_vector我更喜欢第一个函数(将中间对象保存到
b
),原因有两个:(1)生成中间对象可能“昂贵”,在这种情况下,只需重复两次;或者,即使情况并非如此,(2)如果我需要对问题进行故障排除,并且只修复一个相同的
gsub
调用,则我的行为不一致。(我不同意
\u vector2
是更干净的方法,尽管这只是一种观点。)我不相信函数式编程的实用形式会阻止以这种方式存储中间对象。其他人可能不同意。谢谢,我想知道R是否记得函数调用gsub(“a”,“b”,v)及其输出,以便它可以再次使用输出。在任何情况下强制记忆都有点过分。R不会自动记忆。。。考虑非确定性函数(随机性或来自外部数据源的拉力)以及可能产生的影响。通常,尽管这可能更过分:-)我更喜欢第一个函数(将中间对象保存到
b
),原因有两个:(1)生成中间对象可能“昂贵”,在这种情况下,只需重复两次;或者,即使情况并非如此,(2)如果我需要对问题进行故障排除,并且只修复一个相同的
gsub
调用,则我的行为不一致。(我不同意
\u vector2
是更干净的方法,尽管这只是一种观点。)我不相信函数式编程的实用形式会阻止以这种方式存储中间对象。其他人可能不同意。谢谢,我想知道R是否记得函数调用gsub(“a”,“b”,v)及其输出,以便它可以再次使用输出。在任何情况下强制记忆都有点过分。R不会自动记忆。。。考虑非确定性函数(随机性或来自外部数据源的拉力)以及可能产生的影响。总是有,尽管这可能更过分:-)