有没有办法在我的lapply()函数中获取列表索引名称?
n = names(mylist)
lapply(mylist, function(list.elem) { cat("What is the name of this list element?\n" })
Run Code Online (Sandbox Code Playgroud)
我之前询问是否可以在lapply()返回列表中保留索引名称,但我仍然不知道是否有一种简单的方法来获取自定义函数中的每个元素名称.我想避免在名称本身上调用lapply,我宁愿在函数参数中获取名称.
我需要访问lapply函数中的列表名称.我在网上发现了一些线程,据说我应该遍历列表的名称,以便能够获取我的函数中的每个列表元素名称:
> n = names(mylist)
> mynewlist = lapply(n, function(nameindex, mylist) { return(mylist[[nameindex]]) }, mylist)
> names(mynewlist)
NULL
> names(mynewlist) = n
Run Code Online (Sandbox Code Playgroud)
问题是mynewlist丢失了原始的mylist索引,我必须添加last names()赋值来恢复它们.
有没有办法为lapply函数返回的每个元素提供显式索引名称?或者以不同的方式确保mynewlist元素具有正确的索引名称集?如果lapply没有以与mylist相同的顺序返回列表元素,我觉得mynewlist索引名称可能是错误的.
我想重命名一个大型数据框的随机列,我想使用当前列名,而不是索引.如果我向数据添加或删除列,列索引可能会更改,因此我认为使用现有列名称是一种更稳定的解决方案.这就是我现在拥有的:
mydf = merge(df.1, df.2)
colnames(mydf)[which(colnames(mydf) == "MyName.1")] = "MyNewName"
Run Code Online (Sandbox Code Playgroud)
我可以简化此代码,无论是原始merge()呼叫还是仅仅是第二行?"MyName.1"实际上merge是两个不同xts对象的xts的结果.
绑定向量时,rbind不检查列名:
l = list(row1 = c(10, 20), row2 = c(20, 10))
names(l$row1) = c("A", "B")
names(l$row2) = c("B", "A")
l
$row1
A B
10 20
$row2
B A
20 10
rbind(l$row1, l$row2)
A B
[1,] 10 20
[2,] 20 10
Run Code Online (Sandbox Code Playgroud)
如何从多个列表元素生成此矩阵,确保列名在行间正确匹配:
A B
[1,] 10 20
[2,] 10 20
Run Code Online (Sandbox Code Playgroud) 我经常听到,与访问线程之间的进程内存相比,访问进程之间的共享内存段没有性能损失.换句话说,多线程应用程序不会比使用共享内存的一组进程更快(不包括锁定或其他同步问题).
但我怀疑:
1)shmat()将本地进程虚拟内存映射到共享段.必须为每个共享存储器地址执行此转换,并且可能代表显着的成本.在多线程应用程序中,不需要额外的转换:所有VM地址都转换为物理地址,就像在不访问共享内存的常规进程中一样.
2)内核必须以某种方式维护共享内存段.例如,当连接到shm的所有进程都被删除时,shm段仍然处于运行状态,并且最终可以被新启动的进程重新访问.可能存在与shm段上的内核操作相关的一些开销.
多进程共享内存系统是否与多线程应用程序一样快?
How can I get the size of the plot window in R? I've been using xwininfo, but there must be a function or variable in R to extract the current plot height and width.
UPDATE
This works as a savePlot() replacement if you don't have Cairo support and you want to export plots to Windows or other 100 dpi devices:
dev.copy(png, "myplot.png", width=dev.size("px")[1], height=dev.size("px")[2],
res=100, bg="transparent")
dev.off()
Run Code Online (Sandbox Code Playgroud) 此脚本中的最后一行将无法正常工作:
myfile="afile.txt"
mycmd='cat $myfile'
eval $mycmd
echo eval $mycmd
Run Code Online (Sandbox Code Playgroud)
这里echo打印'eval cat $ myfile'.如何打印'eval cat afile.txt'?
我可以像使用data.frame一样将data.table转换为xts对象:
> df = data.frame(x = c("a", "b", "c", "d"), v = rnorm(4))
> dt = data.table(x = c("a", "b", "c", "d"), v = rnorm(4))
> xts(df, as.POSIXlt(c("2011-01-01 15:30:00", "2011-01-02 15:30:00", "2011-01-03 15:50:50", "2011-01-04 15:30:00")))
x v
2011-01-01 15:30:00 "a" "-1.2232283"
2011-01-02 15:30:00 "b" "-0.1654551"
2011-01-03 15:50:50 "c" "-0.4456202"
2011-01-04 15:30:00 "d" "-0.9416562"
> xts(dt, as.POSIXlt(c("2011-01-01 15:30:00", "2011-01-02 15:30:00", "2011-01-03 15:50:50", "2011-01-04 15:30:00")))
x v
2011-01-01 15:30:00 "a" " 1.3089579"
2011-01-02 15:30:00 "b" "-1.7681071"
2011-01-03 15:50:50 "c" "-1.4375100"
2011-01-04 15:30:00 …Run Code Online (Sandbox Code Playgroud) 我想在xts矩阵的所有周期上运行一个函数.apply()非常快,但返回的矩阵与原始对象相比具有转置尺寸:
> dim(myxts)
[1] 7429 48
> myxts.2 = apply(myxts, 1 , function(x) { return(x) })
> dim(myxts.2)
[1] 48 7429
> str(myxts)
An 'xts' object from 2012-01-03 09:30:00 to 2012-01-30 16:00:00 containing:
Data: num [1:7429, 1:48] 4092500 4098500 4091500 4090300 4095200 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:48] "Open" "High" "Low" "Close" ...
Indexed by objects of class: [POSIXlt,POSIXt] TZ:
xts Attributes:
NULL
> str(myxts.2)
num [1:48, 1:7429] 4092500 4098500 4091100 4098500 0 …Run Code Online (Sandbox Code Playgroud) 请注意:关于如何在此站点上测试单个shell变量有很多问题.这个问题是关于测试任何未定义变量的脚本.
您可以在bash中使用未定义的变量,而不会在执行时看到任何错误:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
Run Code Online (Sandbox Code Playgroud)
我发现这很容易出错.如果我想在大脚本中更改变量的名称,或者删除该变量,则所有先前过时的引用都将导致脚本中的错误.有时这对于调试来说并不明显,或者你发现它为时已晚.
为什么允许这样做?有没有办法标记未定义的变量?