Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何:通过不重复创建新的数据帧,使我的代码在R中更高效?_R_Dplyr_Apply_Text Mining - Fatal编程技术网

如何:通过不重复创建新的数据帧,使我的代码在R中更高效?

如何:通过不重复创建新的数据帧,使我的代码在R中更高效?,r,dplyr,apply,text-mining,R,Dplyr,Apply,Text Mining,问题: 首先,我才刚刚开始。虽然我为自己的代码感到自豪,但我已经意识到,它是多么低效和不可复制,它又回到了代码中,并在另一个变量上使用它。特别是,3在排除柱倾盆大雨、降水、雨水时有一个手动组件,这是不可复制的。有人能给我建议吗?如果你能相信的话,以前看起来更糟 代码: 我通常会将所有ETL代码放在ETL函数中,即使我只计划在整个脚本上运行一次 为什么? 如果调试过程中出现错误,您会发现调试很容易 在调试的主题上,调试更容易,因为环境只包含使用过的变量,而不包含其他所有内容 函数调用结束后,辅助变

问题:

首先,我才刚刚开始。虽然我为自己的代码感到自豪,但我已经意识到,它是多么低效和不可复制,它又回到了代码中,并在另一个变量上使用它。特别是,3在排除柱倾盆大雨、降水、雨水时有一个手动组件,这是不可复制的。有人能给我建议吗?如果你能相信的话,以前看起来更糟

代码:


我通常会将所有ETL代码放在ETL函数中,即使我只计划在整个脚本上运行一次

为什么?

如果调试过程中出现错误,您会发现调试很容易 在调试的主题上,调试更容易,因为环境只包含使用过的变量,而不包含其他所有内容 函数调用结束后,辅助变量将自动删除 更容易用标题记录代码块 更可复制 因此,我的脚本倾向于20%设置参数和库 60%的函数和20%的运行这些函数的代码

最后的代码应该如下所示:

f4_raincount <- funcName(raincount)
fn.MyFunc <- function(pf.raincount = raincount){
    # 1) filter for dictionaries containing 1,000 noun counts or more 
        f1_raincount <- pf.raincount %>% filter(total_ncount >= 1000)
    .......[your code (excluding first 2 rows) goes here]
    return(f4_raincount)
}

fn.MyFunc()
或者如果你定义了其他变量

我在所有变量上使用前缀来识别它们是什么函数fn,数据帧df,函数参数pf,长度为1的数字向量n。。。这个清单非常广泛,我甚至有一本规则手册,里面有我用来在项目中保持一致性的所有规则,但这也是另一天的故事 最后,我发现XXXXXX非常有用,因为我可以在不处理代码块时隐藏它们

这也是我在数百行或数千行代码中找到组织的方式。我们每个人都必须找到自己的风格,我相信我们都同意的唯一一件事是一致性是关键


虽然我有点紧张,但使用这个包装函数的关键思想是,您定义的其他表留在函数环境中,然后被删除。实际上,最好先编辑代码,不要创建它们,但至少你可以使用这种方法作为绷带,因为清理这些变量几乎不需要时间和技能。我不必理解你的代码,就可以发表这篇文章。

非常感谢你的反馈@user13900375!3.我意识到我犯了一个很大的错误,没有创建辅助变量,一旦函数调用结束,这些辅助变量就会自动删除。我现在不知道如何纠正这个错误。这些是图书馆:1。请问什么是ETL函数,我猜它对应于“funcName”?在1067本字典中,云到雷雨是由这些单词的计数组成的列。在代码中,我将排除标准应用于一个单词示例,该示例将16个单词减少到13个,并删除数据帧中的行。这是数据框的外观,上面包含变量:id、云、云、毛毛雨、冰雹、薄雾、季风、雨、彩虹、降雨、降雨、雨夹雪、风暴、雷暴、,dictsize@n.baes我已经编辑了我的答案。它现在大了很多,但也应该清楚我的意思
library(dplyr)
df.MyData <- data.frame(#this is of course a bad idea, But since a real world example would make this unreproducible code I went with it anyway.
    Group = c("A","A","B","B","B"),
    Value = c(1,3,1,4,5)
)
n.Value_A <- sum(filter(df.MyData, Group == "A")$Value)
n.Value_B <- sum(filter(df.MyData, Group == "B")$Value)
n.Result <- n.Value_A / n.Value_B * pf.n.Ratio
# LIBRARY ####
    library(dplyr)
# PARAMETERS ####
    df.MyData <- data.frame(#this is of course a bad idea, But since a real world example would make this unreproducible code I went with it anyway.
            Group = c("A","A","B","B","B"),
            Value = c(1,3,1,4,5)
        )
# FUNCTIONS ####
    fn.CalculateRatio <- function(pf.df.MyData = df.MyData, pf.n.Ratio = 2)
    {
        n.Value_A <- sum(filter(df.MyData, Group == "A")$Value)
        n.Value_B <- sum(filter(df.MyData, Group == "B")$Value)
        n.Result <- n.Value_A / n.Value_B * pf.n.Ratio
        return(n.Result)
    }
# PROCESS ####
    fn.CalculateRatio()
fn.MyFunc <- function(pf.raincount = raincount){
    # 1) filter for dictionaries containing 1,000 noun counts or more 
        f1_raincount <- pf.raincount %>% filter(total_ncount >= 1000)
    .......[your code (excluding first 2 rows) goes here]
    return(f4_raincount)
}

fn.MyFunc()
fn.MyFunc(pf.raincount = NEWraincount)