有没有办法在我的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,我宁愿在函数参数中获取名称.
我刚刚开始使用R并遇到一个奇怪的行为:当在空数据框中插入第一行时,原始列名称会丢失.
例:
a<-data.frame(one = numeric(0), two = numeric(0))
a
#[1] one two
#<0 rows> (or 0-length row.names)
names(a)
#[1] "one" "two"
a<-rbind(a, c(5,6))
a
# X5 X6
#1 5 6
names(a)
#[1] "X5" "X6"
Run Code Online (Sandbox Code Playgroud)
如您所见,列名1和2被X5和X6替换.
有人可以告诉我为什么会这样,并且有没有正确的方法来做到这一点而不会丢失列名?
霰弹枪解决方案是将名称保存在辅助矢量中,然后在完成数据帧处理后将其添加回来.
谢谢
语境:
我创建了一个函数,它收集一些数据并将它们作为新行添加到作为参数接收的数据帧中.我创建数据框,遍历我的数据源,将data.frame传递给每个函数调用以填充其结果.
我需要访问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索引名称可能是错误的.
假设我有一个名为的数据文件data.txt,如下所示:
TIME FX FY FZ
0 10 5 6
1 2 4 7
2 5 2 6
...
Run Code Online (Sandbox Code Playgroud)
在python运行中:
import numpy as np
myData = np.genfromtxt("data.txt", names=True)
>>> print myData["TIME"]
[0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我的数据文件顶部的名称会有所不同,所以我想要做的是找出数据文件中我的数组的名称.所以我想要像:
>>> print myData.names
[TIME, F0, F1, F2]
Run Code Online (Sandbox Code Playgroud)
我想只是读取数据文件并获取第一行并将其解析为单独的操作,但这似乎不是非常有效或优雅.
转换数据帧后,我想根据现有行为列分配头/名称.我的标题目前是:
row.names X2 X3 X4 X5 X6 X7 X8 X9 ...
Run Code Online (Sandbox Code Playgroud)
我想摆脱它并使用以下行作为列标题(因为我有很多,所以不必输入它们).
我唯一的解决方案是导出和重新加载数据(header = T).
有标准的AZ,az字符,但也有连字符,em破折号,引号等.
此外,还有所有的国际角色,如变形金刚等.
那么,对于基于英语的系统,完整的设置是什么?那些其他语言的集合呢?UTF8,UTF16等怎么样?
奖金问题:需要多少名称字段,以及它们的最大长度是多少?
编辑:人名中肯定有两种不同类型的字符,那些作为上下文的一部分,以及那些由于结构原因而存在的字符.我不想限制或干扰上下文字符,但我确实需要处理结构上的字符.
例如,我有一个名字,它被一个em破折号分开,但是很难将它与减号区分开来.为了使系统更容易搜索,我想采用所有五种不同类型的破折号,并将它们映射到一个唯一字符(减号),这样搜索者就不需要具体知道最初输入的符号.
破折号也存在问题,可能还有引号,还有多少其他符号?
在下面的最小示例中,我尝试vars在回归公式中使用字符串的值.但是,我只能将变量名称字符串("v2 + v3 + v4")传递给公式,而不是该字符串的实际含义(例如,"v2"是dat $ v2).
我知道有更好的方法来运行回归(例如lm(v1 ~ v2 + v3 + v4, data=dat)).我的情况更复杂,我想弄清楚如何在公式中使用字符串.有什么想法吗?
更新以下代码
# minimal example
# create data frame
v1 <- rnorm(10)
v2 <- sample(c(0,1), 10, replace=TRUE)
v3 <- rnorm(10)
v4 <- rnorm(10)
dat <- cbind(v1, v2, v3, v4)
dat <- as.data.frame(dat)
# create objects of column names
c.2 <- colnames(dat)[2]
c.3 <- colnames(dat)[3]
c.4 <- colnames(dat)[4]
# shortcut to get to the type of object my full code produces
vars <- …Run Code Online (Sandbox Code Playgroud) 假设我有一个data.frame,就像这样:
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
Run Code Online (Sandbox Code Playgroud)
头(DF,3)
收益:
Label.1 Label.2
1 1 1.9825458
2 2 -0.4515584
3 3 0.6397516
Run Code Online (Sandbox Code Playgroud)
如何让R停止使用列名称中的句点自动替换空格?即,"标签1"而不是"Label.1".
与此相关
我想知道嵌套名称说明符究竟是什么?我在草稿中查了一下但是我能理解语法,因为我还没有学过任何编译器设计课程.
void S(){}
struct S{
S(){cout << 1;}
void f(){}
static const int x = 0;
};
int main(){
struct S *p = new struct ::S;
p->::S::f();
S::x;
::S(); // Is ::S a nested name specifier?
delete p;
}
Run Code Online (Sandbox Code Playgroud) 现在跟随我的一系列"python新手问题"并基于另一个问题.
转到http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables并向下滚动到"默认参数值".在那里你可以找到以下内容:
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
Run Code Online (Sandbox Code Playgroud)
在python.org上甚至还有一个"重要的警告",这个例子非常相同,并不是说它"更好".
所以,这里的问题是:为什么在一个已知问题上的"好"语法比在一个促进"优雅语法"和"易于使用"的编程语言中那样丑陋?
编辑:
我不是在问为什么或如何发生(感谢Mark的链接).
我问为什么没有更简单的替代内置语言.
我认为更好的方法可能是在def自身中做一些事情,其中name参数将附加到def可变对象中的"本地"或"新" .就像是:
def better_append(new_item, a_list=immutable([])):
a_list.append(new_item)
return a_list
Run Code Online (Sandbox Code Playgroud)
我相信有人可以提供更好的语法,但我也猜测必须有一个非常好的解释为什么没有这样做.