天道酬勤,学无止境

R:从列表对象创建自定义输出(R: Create custom output from list object)

问题

我有一个存储不同数据类型和对象的列表:

header <- "This is a header."
a <- 10
b <- 20
c <- 30
w <- 1:10
x <- 21:30
y <- 51:60
z <- 0:9

mylist <- list(header = header,
               const = list(a = a, b = b, c = c),
               data = data.frame(w,x,y,z))

现在我希望 R 以下列格式显示这个列表:

This is a header.

Values: a: 10    b: 20    c: 30

Data:         w  x  y z
          1   1 21 51 0
          2   2 22 52 1
          3   3 23 53 2
          4   4 24 54 3
          5   5 25 55 4
          6   6 26 56 5
          7   7 27 57 6
          8   8 28 58 7
          9   9 29 59 8
          10 10 30 60 9

有没有方便的方法来做到这一点?

回答1

如果您想定期使用这种print ,我将使用如下class

class(mylist) <- "myclass"

print.myclass <- function(x, ...){
  cat(x$header,"\n\n")
  cat("Values: ", sprintf("%s: %s", names(x$const), x$const), "\n\n")
  cat("Data:\n")
  print(x$data, ...)
}

如果您想了解有关泛型函数的更多信息,请查看 http://adv-r.had.co.nz/OO-essentials.html

现在打印的结果是:

> mylist #equal to print(mylist). Thats why we extended print with print.myclass
This is a header. 

Values:  a: 10 b: 20 c: 30 

Data:
    w  x  y z
1   1 21 51 0
2   2 22 52 1
3   3 23 53 2
4   4 24 54 3
5   5 25 55 4
6   6 26 56 5
7   7 27 57 6
8   8 28 58 7
9   9 29 59 8
10 10 30 60 9

感谢 Ananda Mahto 和 David Arenburg 改进了我的原始答案。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在R中为水模型打印“漂亮”表(Print “pretty” tables for h2o models in R)
    问题 R有多个软件包,可帮助从统计模型输出中打印“漂亮”表(LaTeX / HTML / TEXT),并轻松比较替代模型规格的结果。 其中一些软件包是apsrtable , xtable , memisc , texreg , outreg和stargazer (有关示例,请参见此处:https: outreg -from-r-statistical-models-output /)。 是否有任何可比的R包支持h2o包的模型? 这是两个带有h2o简单GLM模型的示例,我希望将它们彼此h2o打印为“美丽”表。 # Load package and setup h2o library(h2o) localH2O <- h2o.init(ip = 'localhost', port = 54321, max_mem_size = '4g') # Load data prostatePath <- system.file("extdata", "prostate.csv", package = "h2o") prostate.hex <- h2o.importFile(path = prostatePath, destination_frame = "prostate.hex") # Run GLMs model.output.1 <- h2o.glm(y = "CAPSULE", x =
  • 将对象序列化为自定义字符串格式以在输出文件中使用的最佳实践(Best practices for serializing objects to a custom string format for use in an output file)
    问题 我正要在特定的业务类上实现ToString()的重写,以便生成一种Excel友好格式以写入输出文件,该文件稍后将被提取并处理。 数据应该是这样的: 5555555 "LASTN SR, FIRSTN" 5555555555 13956 STREET RD TOWNSVILLE MI 48890 25.88 01-003-06-0934 对我来说,只做一个格式字符串并覆盖ToString()没什么大不了的,但是对于我决定以这种方式序列化的任何对象,这都会改变ToString()的行为,从而使ToString()的实现在整个库中都变得衣衫agged 。 现在,我一直在阅读IFormatProvider,实现它的类听起来像是一个好主意,但是对于所有这些逻辑应该驻留在何处以及如何构建格式化程序类,我仍然有些困惑。 当您需要从对象中制作CSV,制表符分隔或其他非XML任意字符串时,你们会做什么? 回答1 这是一种使用反射从对象列表创建CSV的通用方式: public static string ToCsv<T>(string separator, IEnumerable<T> objectlist) { Type t = typeof(T); FieldInfo[] fields = t.GetFields(); string header = String.Join
  • Android:如何将微调器绑定到自定义对象列表?(Android: How to bind spinner to custom object list?)
    问题 在用户界面中,必须有一个微调器,其中包含一些名称(名称可见),每个名称都有其自己的ID(这些ID不等于显示顺序)。 当用户从列表中选择名称时,必须更改变量currentID。 该应用程序包含ArrayList 其中User是具有ID和名称的对象: public class User{ public int ID; public String name; } 我不知道如何创建一个显示用户名列表的微调器,并将微调器项绑定到ID,以便在选择/更改微调器项时将变量currentID设置为适当的值。 如果有人可以显示所描述问题的解决方案或提供有用的链接来解决该问题,我将不胜感激。 谢谢! 回答1 您可以看一下这个答案。 您也可以使用自定义适配器,但是以下解决方案适用于简单情况。 这是一个重新发布: 因此,如果您因为想要在Spinner中同时包含标签和值而来到这里-这是我的操作方法: 只需以通常的方式创建Spinner 在array.xml文件中定义2个相等大小的数组-一个数组用于标签,一个数组用于值使用android:entries="@array/labels"设置Spinner 当您需要一个值时,请执行以下操作(不,您不必链接它): String selectedVal = getResources().getStringArray(R.array.values)[spinner
  • 如何在自定义对象的android中使用ArrayAdapter(how to use an ArrayAdapter in android of custom objects)
    问题 如何在Listview中使用自定义对象的属性。 如果我实现一个带有字符串列表的ArrayAdapter,它在Listview中会很好地显示,但是当我使用自定义对象的列表时,它只会输出内存地址。 我到目前为止的代码: ArrayList<CustomObject> allObjects = new ArrayList<>(); allObjects.add("title", "http://url.com")); ArrayAdapter<NewsObject> adapter = new ArrayAdapter<NewsObject>(this, android.R.layout.simple_list_item_1, android.R.id.text1, allNews); // Assign adapter to ListView listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Uri uri = Uri.parse( "http
  • 将 javascript (d3.js) 绑定到闪亮(Binding javascript (d3.js) to shiny)
    问题 首先,我对 javascript 及其库 d3.js 相当不熟悉,但我对 R 很熟悉。使用 Shiny 创建仪表板既有趣又简单(感谢 stackoverflow)。 现在我想通过将 d3 元素连接到它来扩展它。 我正在寻找有关如何将 javascript 实际绑定到 Shiny(R 仪表板)并解释实际情况的信息来源。 背景:我在 w3schools 上做了关于 js 和 jquery 的教程,并使用 Scott Murray 的书(网络交互式数据可视化)学习了(一点)关于 d3 的知识。 我希望这足以让我理解有关如何在 Shiny 网站上构建自定义输入/输出绑定的示例和解释: http://shiny.rstudio.com/articles/building-inputs.html 但不幸的是,我没有,而且我似乎找不到任何使用最少工作代码的示例。 github 上的许多例子对我来说很复杂,很可能是因为我对 javascript 的经验很少。 以下是使用 javascript 的自定义输入绑定示例: https://github.com/jcheng5/shiny-js-examples/tree/master/input 这是我尝试展开的输入和输出绑定的示例: <script src="http://d3js.org/d3.v3.js"></script> <script
  • 电源外壳。 创建一个类文件来保存自定义对象?(Powershell. Create a class file to hold Custom Objects?)
    问题 我使用Powershell的custom-object命令来保存数据点。 自定义对象仅创建一个对象,并为其分配一个变量。 Powershell可以更进一步,创建可以用来制造对象的新类吗? 在下面的示例中,我存储了三个数据:服务器名称,时间戳和服务器上发生事件以来的分钟数。 当我学习Powershell时,我将所有这些都放入二维数组中: $record = @("Server","Timestamp","Minutes") for ($j = 0; $j -lt 10; $j++){ $record += @("Server1","$(get-date)",$j) sleep 60 } $record | export-csv -path c:\record.csv -no type information export-csv不适用于数组,因此我开始使用自定义对象: $record = @() for ($j = 0; $j -lt 10; $j++){ $r = New-Object -TypeName PSObject $r | Add-Member -MemberType NoteProperty -Name Server -Value "" $r | Add-Member -MemberType NoteProperty -Name Timesteamp -Value
  • K8s命令篇-Kubernetes工作实用命令集结号
    K8s命令篇-Kubernetes工作实用命令集结号 1.kubectl命令概述 kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集 群进行操作。在实际工作中熟练的使用这些命令去定位K8s集群问题时是我们爱不释手的好伴侣,来和我们相互认识下吧。 2.kubectl用法概述 2.1.kubectl命令行语法 kubectl [command] [Type] [NAME] [flas] command:子命令,用于操作Kubernetes集群资源对象的命 令,例如create、delete、describe、get、apply等。TYPE:资源对象的类型,区分大小写,能以单数、复数或者 简写形式表示。NAME:资源对象的名称,区分大小写。如果不指定名称, 系统则将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返 回所有Pod的列表。flags:kubectl子命令的可选参数,例如使用“-s”指定API Server的URL地址而不用默认值。 2.2.kubectl 可操作资源对象及其缩写
  • 使用JSON模块进行漂亮打印时,如何实现自定义缩进?(How to implement custom indentation when pretty-printing with the JSON module?)
    问题 因此,我使用的是Python 2.7,使用json模块对以下数据结构进行编码: 'layer1': { 'layer2': { 'layer3_1': [ long_list_of_stuff ], 'layer3_2': 'string' } } 我的问题是我正在使用漂亮的打印来打印所有内容,如下所示: json.dumps(data_structure, indent=2) 太好了,除了"layer3_1"的内容外,我都希望全部缩进—这是一个庞大的字典,列出了坐标,因此,每一个上设置一个值都可以使漂亮的打印创建具有数千行的文件,其示例如下: { "layer1": { "layer2": { "layer3_1": [ { "x": 1, "y": 7 }, { "x": 0, "y": 4 }, { "x": 5, "y": 3 }, { "x": 6, "y": 9 } ], "layer3_2": "string" } } } 我真正想要的是类似于以下内容的东西: { "layer1": { "layer2": { "layer3_1": [{"x":1,"y":7},{"x":0,"y":4},{"x":5,"y":3},{"x":6,"y":9}], "layer3_2": "string" } } } 我听说可以扩展json模块:是否可以将其设置为仅在
  • 如何创建输出列表(不是表)的对象(How to create an Object that outputs a List (Not A Table))
    问题 这是从另一个问题中衍生出来的,该问题位于此处:将对象格式化为整洁的列表我认为该论据的基础是错误的,因为我们此后不再处理对象的格式化。 这仅用于控制台显示的外观,但是在您操纵包含对象的变量时,它可能与对象的完整性有关。 我需要创建一个固有地输出列表(而不是表)的对象。 我知道这是有可能的,因为我已经测试了许多未编写的功能,并且创建的对象实际上是列表。 无需使用Format-List来扭曲或塑形已经存在的内容。 我只是无法弄清楚为什么有时输出是列表或表。 我不确定魔术在哪里。 但是我确实知道,当我运行$Host之前,先运行包含所创建对象的变量时,我得到Host生成的对象,该对象的列表以及随后将对象成形的列表(通常以表格形式显示)。 当然,这可能会提供所需的结果,但我不想显示主机信息。 那么解决方案是什么,我希望有人能解释一下。 回答1 当PowerShell向用户呈现数据/对象时,PowerShell会执行一些默认格式。 通常,当对象具有最多4个属性时,它们以表格形式显示;而当对象具有4个以上属性时,则以列表形式显示。 如果连续输出多个内容,PowerShell会将第一个对象的格式(列表/表)应用于所有后续对象。 我不知道此行为背后的确切原因,但大概是为了使输出更加一致。 示范: PS C:\> $o1 = New-Object -Type PSObject -Property
  • 创建自己的自定义适配器时,getView()方法如何工作?(How does the getView() method work when creating your own custom adapter?)
    问题 我的问题是: LayoutInflater的确切功能是什么? 为什么我阅读的所有文章都首先检查convertview是否为null? 当它为null时是什么意思,当它不是null时又意味着什么? 此方法接受的父参数是什么? 回答1 1:LayoutInflater获取您的布局XML文件,并根据其内容创建不同的View对象。 2:构建适配器是为了重用视图,当滚动视图以使其不再可见时,可以将其用于出现的新视图之一。 这个重用的View是convertView 。 如果为null,则意味着没有回收的View,我们必须创建一个新的View,否则我们应该使用它来避免创建一个新View。 3:提供了parent ,因此您可以将其放大为适当的布局参数的视图。 所有这些都可以用来有效地创建将出现在列表中的视图(或其他带有适配器的视图): public View getView(int position, @Nullable View convertView, ViewGroup parent){ if (convertView == null) { //We must create a View: convertView = inflater.inflate(R.layout.my_list_item, parent, false); } //Here we can do changes
  • 在Java中,如何根据另一个列表对一个列表进行排序?(In Java how do you sort one list based on another?)
    问题 我已经看过其他几个与此问题类似的问题,但是我还没有真正找到能够解决我的问题的东西。 我的用例是:用户最初有一个项目列表(listA)。 他们对商品进行了重新排序,并希望保留该订单(listB),但是由于限制,我无法在后端保留该订单,因此我必须在检索listA之后对其进行排序。 所以基本上,我有2个ArrayList(listA和listB)。 一个具有特定顺序的列表应位于(listB)中,另一个具有项目列表(listA)。 我想对基于listB的listA进行排序。 回答1 Collections.sort(listB, new Comparator<Item>() { public int compare(Item left, Item right) { return Integer.compare(listA.indexOf(left), listA.indexOf(right)); } }); 但是,这效率很低,您可能应该从listA创建Map<Item, Integer>以更快地查找项目的位置。 番石榴有一个现成的比较器可以做到这一点:Ordering.explicit() 回答2 使用Java 8: Collections.sort(listToSort, Comparator.comparing(item -> listWithOrder.indexOf(item
  • notifyDataSetChange在自定义适配器上不起作用(notifyDataSetChange not working from custom adapter)
    问题 重新填充ListView ,我从Adapter调用特定方法。 问题: 当我从Adapter调用updateReceiptsList ,数据会刷新,但ListView不能反映更改。 问题: 为什么在调用notifyDataSetChanged时ListView显示新数据? 适配器: public class ReceiptListAdapter extends BaseAdapter { public List<Receipt> receiptlist; private Context context; private LayoutInflater inflater; private DateHelpers dateH; public ReceiptListAdapter(Activity activity, Context mcontext, List<Receipt> rl) { context = mcontext; receiptlist = rl; Collections.reverse(receiptlist); inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); dateH = new DateHelpers(); } @Override
  • 如何从一个返回多个值的函数中赋值?(How to assign from a function which returns more than one value?)
    问题 仍在尝试进入R逻辑...解包(在LHS上)返回多个值的结果的“最佳”方法是什么? 我显然不能这样做: R> functionReturningTwoValues <- function() { return(c(1, 2)) } R> functionReturningTwoValues() [1] 1 2 R> a, b <- functionReturningTwoValues() Error: unexpected ',' in "a," R> c(a, b) <- functionReturningTwoValues() Error in c(a, b) <- functionReturningTwoValues() : object 'a' not found 我真的必须执行以下操作吗? R> r <- functionReturningTwoValues() R> a <- r[1]; b <- r[2] 还是R程序员会写这样的东西: R> functionReturningTwoValues <- function() {return(list(first=1, second=2))} R> r <- functionReturningTwoValues() R> r$first [1] 1 R> r$second [1] 2 ---编辑回答谢恩的问题---
  • 如何从Java方法返回多个对象?(How to return multiple objects from a Java method?)
    问题 我想从Java方法返回两个对象,并且想知道这样做的好方法是什么? 我可以想到的可能方法是:返回HashMap (因为两个Object是相关的)或返回Object对象的ArrayList 。 更准确地说,我要返回的两个对象是(a)对象List和(b)相同名称的逗号分隔。 我想从一个方法返回这两个对象,因为我不想遍历对象列表以获得逗号分隔的名称(我可以在此方法的同一循环中完成此操作)。 不知何故,返回HashMap看起来并不十分优雅。 回答1 如果要返回两个对象,通常需要返回一个封装了两个对象的单个对象。 您可以返回一个NamedObject对象的列表, NamedObject所示: public class NamedObject<T> { public final String name; public final T object; public NamedObject(String name, T object) { this.name = name; this.object = object; } } 然后,您可以轻松返回List<NamedObject<WhateverTypeYouWant>> 。 另外:为什么要返回逗号分隔的名称列表而不是List<String> ? 或者更好的方法是,返回一个Map<String,TheObjectType>
  • 如何使用复选框和自定义适配器从Listview获取选定的列表项?(How to get selected list items from a Listview with checkBox and Custom Adapter?)
    问题 我有一个带有CheckBox的ListView 。 我正在使用Custom Adapter来填充ListView 。 在我的xml文件中,我在底部有一个Button 。 我想要的是让用户选择ListView的行数,然后在他/她单击Button获得所选项目的位置,以便我可以获取特定行的对象以进行进一步的计算。 回答1 下面的代码片段正是您想要的。 package com.windrealm.android; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget
  • 如何使用复选框创建自定义联系人列表(how to create custom contact list with checkbox)
    问题 如何使用复选框创建自定义联系人列表以从Android中的列表中选择多个联系人 public class AddFromContacts extends Activity { ArrayList<String> listname; // ArrayList<String> list_no; Context context; LayoutInflater inflater; ListView contactlistView; String name; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.show); contactlistView = (ListView) findViewById(R.id.ContactlistView); listname = new ArrayList<String>(); // list_no = new ArrayList<String>(); ContentResolver cr = getContentResolver(); Cursor cur = cr.query
  • 创建可下载的自定义主题并在运行时应用(Create downloadable custom theme and apply it during run time)
    问题 我正在制作一个Android应用,该应用需要允许客户端维护其服务器上的资源,其中包括字符串,可绘制对象等。 我已经创建了一种用于下载包含所有这些文件的zip文件的机制,并且它们能够轻松更改字符串,我还创建了一种机制,该机制允许客户端更改UI控件的bg颜色,更改宽度,高度等,但我感觉必须有一种更好的方法来创建所有这些内容。 所以我相信真正的问题是: 创建自定义主题,将其部署在服务器上,让应用下载并随后将其应用于应用的最佳实践是什么? 我知道如何创建自定义主题以及如何与应用程序一起部署它,以及如何在运行时应用它,但是这里的问题是资源是预先编译的,一旦创建APK,开发人员就无法更改它们必须添加新主题/可绘制对象/样式/字符串。 我是否需要为此创建一个自定义机制(从文件系统加载图像,样式,字符串等),并在运行时通过创建自己的控件来应用它们,例如在构造函数中执行此操作,或者是否有办法这适当的:)? (Swiftkey如何使用所有键盘主题执行此操作,以及类似的应用程序如何做到这一点,从而允许用户下载主题并在此之后应用主题)? 很抱歉,如果我没有看到类似的问题,我确实在过去两天内尝试自己找到一个答案,但是我找不到任何有用的东西,因此这是我获得建设性答案的最后机会:)。 我需要的最接近解决方案的答案是:使用外部主题文件在运行时更改应用程序主题,但是我已经实现了该功能,并且我知道我可以更改颜色
  • How can I display a list view in an Android Alert Dialog?(How can I display a list view in an Android Alert Dialog?)
    问题 在一个Android应用程序中,我想在AlertDialog中显示一个自定义列表视图。 我怎样才能做到这一点? 回答1 下面的代码用于在AlertDialog中显示自定义列表 AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this); builderSingle.setIcon(R.drawable.ic_launcher); builderSingle.setTitle("Select One Name:-"); final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, android.R.layout.select_dialog_singlechoice); arrayAdapter.add("Hardik"); arrayAdapter.add("Archit"); arrayAdapter.add("Jignesh"); arrayAdapter.add("Umang"); arrayAdapter.add("Gatti"); builderSingle.setNegativeButton("cancel", new DialogInterface
  • 来自数据库的 Django 动态下拉列表(Django Dynamic Drop-down List from Database)
    问题 我想开发一个 Django 应用程序,我想要的功能之一是动态下拉列表......特别是对于车辆品牌和型号......选择特定品牌将仅更新型号列表属于那个 make....我知道这在 javascript 或 jQuery 中是可能的(如果有人有答案,这将是我的最佳选择)但我不知道如何去做。 此外,我希望品牌、型号、年份和系列是通用的,然后其他属性(如颜色、传输等)是变量,这样只需输入新车的品牌、型号、年份和系列即可。 任何想法将不胜感激。 回答1 您提到的 3 件事是常见的,制造,型号,年份,将是 3 个输入值。 当提供给服务器时,包含详细信息的对象将返回到调用页面。 该页面将解析对象详细信息(使用 JavaScript),并更新 UI 以将它们显示给用户。 从 Django 方面来看,需要有获取 3 个输入并返回输出的工具。 从客户端,需要有设施将 3 个输入传递给服务器,然后适当地解析服务器的响应。 Django 有一个 REST api 框架,可以很容易地添加上面提到的“api”——活塞。 使用 Piston,您只需为该资源创建一个 URL,然后添加一个处理程序来处理它。 (您仍然需要浏览活塞文档,但这应该让您了解它的外观) urls.py: vehicle_details = Resource(handler=VehicleDetails) url(r'
  • 如何自定义对要在json.dumps中使用的字典列表的排序(How to custom-sort a list of dict to use in json.dumps)
    问题 我有一个类似的清单 allsites = [ { 'A5': 'G', 'A10': 'G', 'site': 'example1.com', 'A1': 'G' }, { 'A5': 'R', 'A10': 'Y', 'site': 'example2.com', 'A1': 'G' } ] 我在json.dumps使用的: data = { 'Author':"joe", 'data':allsites } print json.dumps(data,sort_keys=True,indent=4, separators=(',', ': ')) 这将输出以下JSON: { "Author": "joe", "data": [ { "A1": "G", "A10": "G", "A5": "G", "site": "example1.com" }, { "A1": "G", (...) 我希望通过自定义键(“字母”)对这个JSON字符串的“数据”部分进行排序,在上述情况下,该site, A1, A5, A10将是site, A1, A5, A10 ,实际上如下所示: { "Author": "joe", "data": [ { "site": "example1.com", "A1": "G", "A5": "G", "A10": "G" }, { "site":