R 如何以不可见的方式返回列表的一部分

R 如何以不可见的方式返回列表的一部分,r,user-defined-functions,R,User Defined Functions,我可能遗漏了一些非常简单的东西 如何在R中创建一个用户定义的函数,返回一些元素不可见的列表 sky <- function(){ list(sun = 1, clouds = 4, birds =2, moon = 0) } up <- sky() up #$sun #[1] 1 # #$clouds #[1] 4 # #$birds #[1] 2 # #$moon #[1] 0 您可以制作一个S3打印方法 sky <- function(){ structure(l

我可能遗漏了一些非常简单的东西

如何在R中创建一个用户定义的函数,返回一些元素不可见的列表

sky <- function(){
list(sun = 1, clouds = 4, birds =2, moon = 0)
}

up <- sky()

up
#$sun
#[1] 1
#
#$clouds
#[1] 4
#
#$birds
#[1] 2
#
#$moon
#[1] 0

您可以制作一个S3打印方法

sky <- function(){
  structure(list(sun = 1, clouds = 4, birds =2, moon = 0), class="mysky")
}
print.mysky <- function(x, ...) print(x[1:2])

sky()
#$sun
#[1] 1
#
#$clouds
#[1] 4

下面是将类指定给对象的另一种方法

sky <- function(){
  out <- list(sun = 1, clouds = 4, birds =2, moon = 0)
  class(out) <- "mysky"
  out
}

如果要分派默认的打印方法,可以直接调用它(
print.default(sky())
),或者
取消对对象的访问

#print.default(sky())
unclass(sky())

#$sun
#[1] 1
#
#$clouds
#[1] 4
#
#$birds
#[1] 2
#
#$moon
#[1] 0

为什么不使用JQuery来实现这一点呢。将元素放入
  • 中,并使用JQuery隐藏和显示元素。你可以展示前两个,或者展示所有其他的。我希望这个机制对你有用

    <ul class="collapse">
         <li>sun</li>
         <li>clouds</li>
         <li>birds</li>
         <li>moon</li>
    </ul>
    

    这使用
    打印
    来完成工作。它确实比猫有一个优势,即它“理解”列表:


    您要求对
    up
    进行“调用”,这意味着它是一个函数,但随后您要求它显示名称,就好像它是一个数据对象一样。这一点很好。我刚刚纠正了这个问题。元素“不可见”是什么意思?
    up$birds
    返回什么?
    up$birds
    返回2。但是当您打印
    up
    时,
    up$birds
    up$moon
    不会被列出。另一个例子是,如果
    a
    属于
    “lm”
    ,则
    print(summary(a))
    返回
    名称(summary(a))
    中元素的不完整列表。这是怎么做到的?
    class(sky())
    #[1] "mysky"
    
    #print.default(sky())
    unclass(sky())
    
    #$sun
    #[1] 1
    #
    #$clouds
    #[1] 4
    #
    #$birds
    #[1] 2
    #
    #$moon
    #[1] 0
    
    <ul class="collapse">
         <li>sun</li>
         <li>clouds</li>
         <li>birds</li>
         <li>moon</li>
    </ul>
    
    $(document).ready(function () {
         $('ul.collapse').wrap('<div class="collapseWrapper" />');
         $('div.collapseWrapper').css({ 'height' : '45px' }).after('<a href="#" class="collapseMore">view details . . .</a>');
    
         $('a.collapseMore').click(function () {
              if ($(this).hasClass('expanded')) {
                   $(this).prev().animate({ height: '45px' }, 500);
                   $(this).text('view details . . .').removeClass('expanded');
              }
              else {
                   $(this).prev().animate({ height: $(this).prev().find( 'ul.collapse' ).outerHeight(true) }, 500);
                   $(this).text('hide details . . .').addClass('expanded');
              }
              return false;
         });
    });
    
    ul.collapse{  }
    ul.collapse li {  }
    div.collapseWrapper { overflow: hidden; }
    a.collapseMore {  }
    a.collapseMore:hover {  }
    
     sky <- function(){
        x <- list(sun = 1, clouds = 4, birds =2, moon = 0)
        print(x[1:2])
        invisible(x)
     }
    #----------- 
    > up <- sky()
    $sun
    [1] 1
    
    $clouds
    [1] 4
    
    > z <- sky()
    $sun
    [1] 1
    
    $clouds
    [1] 4
    
    > print(z)
    $sun
    [1] 1
    
    $clouds
    [1] 4
    
    $birds
    [1] 2
    
    $moon
    [1] 0
    
    sky <- function(){
    x <- list(sun = 1, clouds = 4, birds =2, moon = 0)
    sapply(x[1:2], cat, "\n")
    invisible(x)
    }
    
    up <- sky()
    1
    4