可以将函数调用到项目环境中存储的所有特定对象吗?

时间:2017-11-21 20:19:44

标签: r dplyr lapply environment

我愚蠢地在R项目中创建了大量新的data_frames,试图解决特定问题而不进行适当的提交。通过所有实用名称和大多数希腊字母表,我现在拥有一个充满data_frame对象的环境,其名称类似于' bob',' might.work','几乎所有& #39 ;.我想使用循环函数 - lapply或其他 - 来返回一些指示符,这些指示符将告诉我有关环境中每个数据框对象的信息。然后我可以根据退货清理/删除。

那么可以使用lapply来访问R项目环境中的所有data_frames吗?像这样的东西?

lapply(environment, function (x){
  if(is.dataframe(x)){
  dplyr::glimpse(x)
}
}

感谢。

3 个答案:

答案 0 :(得分:3)

QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Recd_Dt ASC)=1 函数可以轻松地迭代环境中的对象

import { Component } from '@angular/core';
import { Loginservice } from './services/login.service';
import { FormGroup, FormControl, Validators } from '@angular/forms';
import { Router } from '@angular/router';

@Component({
    selector    : 'app-login',
    templateUrl : 'user-login.html',
    styleUrls   : ['styles/login-style.css']

})
export class UserLogin{

    public userDetail:any[];
    public islogin:boolean;
    public routers : Router;
    constructor(private service:Loginservice){

    }
    loginform = new FormGroup({
        username    : new FormControl('',[Validators.required, Validators.minLength(5)]),
        password    : new FormControl('',[Validators.required, Validators.minLength(5)])
    });

    get username(){
        return this.loginform.get('username');
    }
    get password(){
        return this.loginform.get('password');
    }

    getStyle(){
        return {
            'font-size': '11px',
            'text-align': 'center'
        };
    }

    authLogin(loginObj){

        let username = loginObj.value.username;
        let password = loginObj.value.password;
        let postdata = {'username':username, 'password':password};
        //console.log(postdata);
        this.service.validateUser(postdata)
                    .subscribe(
                       response => {
                           this.islogin= response.json().status=='1'?true:false;
                           //alert(this.islogin);
                           //console.log(response);
                           this.routers.navigate(['/register']);
                       },
                       error =>{
                           alert(error+"asdsadsa");
                       }

                    );

    }
}

答案 1 :(得分:1)

当然可以!

lapply(ls(),function(x){
  o = get(x,envir = globalenv())
  cat("if"(is.data.frame(o),paste0(x," is a data frame!\n"),"Nope.\n"))
})
  • ls()将列出环境中的所有对象名称(默认为全局)。
  • 由于这只是一个名称,我们需要get值,但指定全局环境(因为此时我们处于功能环境中)
  • 然后我cat,如果它是一个数据框,但你可以用o对象做任何你想做的事。

答案 2 :(得分:0)

以下函数将返回环境data.frame中继承自类environ的对象,默认为.GlobalEnv

getDataFrames <- function(environ = .GlobalEnv){
    l <- ls(name = environ)
    res <- NULL
    for(i in seq_along(l)){
        r <- inherits(get(l[i], envir = environ), "data.frame")
        if(r) res <- c(res, l[i])
    }
    res
}

getDataFrames()