R奇怪的应用返回

R奇怪的应用返回,r,R,为了逐行应用函数,我使用“应用于矩阵”。 我的语法如下: res = apply(X,1,MyFunc) 上面的函数MyFunc返回两个值的列表。 但是这个apply应用程序的结果是一个奇怪的结构,其中R似乎添加了一些自己的(内务管理?)数据: 而我等待的结果只是: res = $a [1] 80.8078 $b [1] 6247 我不知道为什么这个奇怪的81是由R插入的,我怎样才能摆脱它。 谢谢你的帮助这是完全正常的行为。您正在对具有命名行的矩阵应用函数。函数为每一行返回一个列表,该列表

为了逐行应用函数,我使用“应用于矩阵”。 我的语法如下:

res = apply(X,1,MyFunc)
上面的函数MyFunc返回两个值的列表。 但是这个apply应用程序的结果是一个奇怪的结构,其中R似乎添加了一些自己的(内务管理?)数据:

而我等待的结果只是:

res = $a
[1] 80.8078

$b
[1] 6247
我不知道为什么这个奇怪的
81
是由R插入的,我怎样才能摆脱它。
谢谢你的帮助

这是完全正常的行为。您正在对具有命名行的矩阵应用函数。函数为每一行返回一个列表,该列表中的每个元素都用相应的rowname命名

下面是一个复制您所描述内容的示例:

x <- matrix(1:4, nrow=2)
rownames(x) <- 80:81

myFunc <- function(x)list(a=1, b=2)

xx <- apply(x, 1, myFunc)
xx
请看一下此列表的结构:

str(xx)
List of 2
 $ 80:List of 2
  ..$ a: num 1
  ..$ b: num 2
 $ 81:List of 2
  ..$ a: num 1
  ..$ b: num 2
要索引第一个元素,只需使用
xx[[1]]

xx[[1]]
$a
[1] 1

$b
[1] 2

这是一个关于你可能打算做什么的猜测。。。如果返回向量,则
apply
的结果将是矩阵,而不是返回列表:

myFunc <- function(x)c(a=1, b=2)
apply(x, 1, myFunc)
  80 81
a  1  1
b  2  2

这是完全正常的行为。您正在对具有命名行的矩阵应用函数。函数为每一行返回一个列表,该列表中的每个元素都用相应的rowname命名

下面是一个复制您所描述内容的示例:

x <- matrix(1:4, nrow=2)
rownames(x) <- 80:81

myFunc <- function(x)list(a=1, b=2)

xx <- apply(x, 1, myFunc)
xx
请看一下此列表的结构:

str(xx)
List of 2
 $ 80:List of 2
  ..$ a: num 1
  ..$ b: num 2
 $ 81:List of 2
  ..$ a: num 1
  ..$ b: num 2
要索引第一个元素,只需使用
xx[[1]]

xx[[1]]
$a
[1] 1

$b
[1] 2

这是一个关于你可能打算做什么的猜测。。。如果返回向量,则
apply
的结果将是矩阵,而不是返回列表:

myFunc <- function(x)c(a=1, b=2)
apply(x, 1, myFunc)
  80 81
a  1  1
b  2  2

了解矩阵(
X
)的外观会有所帮助。让我们试试这样的方法:

mf <- function(x) list(a=sum(x),b=prod(x))
mat <- matrix(1:6,nrow=2)

您需要第一个下标来区分每行将生成的列表。我怀疑您的行名已编号,这导致您看到的
$`81`

了解矩阵(
X
)的外观会有所帮助。让我们试试这样的方法:

mf <- function(x) list(a=sum(x),b=prod(x))
mat <- matrix(1:6,nrow=2)

您需要第一个下标来区分每行将生成的列表。我怀疑您的行名已编号,这导致您看到的
$`81`

非常感谢。我注意到xx[[1]]给了我结果。我怎样才能使我的申请表返回洞?我试着使用sapply(xx,“[]”)但无法检索我的结果。我不确定您的意思…您创建了一个函数来返回列表列表。每个元素的名称与原始数组中的行相同。您想要的预期结果是什么?例如,我想要一个包含属性a和b的列表向量。正如您所注意到的,我可以访问此列表的第一个元素输入xx[[1]]得到列表的向量,这给了我两个项目a和b的列表,但我想要所有的列表。我尝试了xx[[1:length(xx)]]但事实并非如此work@volatile我的猜测是,您想要一个矩阵作为返回值,而不是列表列表。我编辑了我的答案,以演示如何执行该操作。@volatile,如果这正是您想要的,请务必接受和/或向上投票。这有助于我们集中精力解决R标记中未回答的问题。非常感谢。我注意到xx[[1]]给了我我的结果。我怎样才能使我的申请返回洞?我尝试使用sapply(xx,“[]”)但无法检索我的结果。我不确定您的意思…您创建了一个函数来返回列表列表。每个元素的名称与原始数组中的行相同。您想要的预期结果是什么?例如,我想要一个包含属性a和b的列表向量。正如您所注意到的,我可以访问此列表的第一个元素输入xx[[1]]得到列表的向量,这给了我两个项目a和b的列表,但我想要所有的列表。我尝试了xx[[1:length(xx)]]但事实并非如此work@volatile我的猜测是,您想要一个矩阵作为返回值,而不是列表列表。我编辑了我的答案,以演示如何执行该操作。@volatile,如果这正是您想要的,请务必接受和/或向上投票。这有助于我们集中精力解决R标记中未回答的问题。非常感谢r帮助。看来我们正在向解决方案靠拢。非常感谢你的帮助。看来我们正在向解决方案靠拢