R 如何以不可见的方式返回列表的一部分
我可能遗漏了一些非常简单的东西 如何在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
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