由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - R question about apply() and outer()
相关主题
有什么R function 可以推荐?请教一个R的问题(function)
请问R里apply和sapply有什么区别R help: matrix and vector operation
如何在R里面对一整列数据进行操作?R function 求和问题
R help[R] How to apply "apply" here?
再问R的问题 - 关于matrix 的operationapply(a,2,var)里,var是什么?
怎样用apply对多种endpoint构建linear model【R】保留matrix中某些值
【欢迎进来讨论】for loop in RR:matrix
[R]有没有函数:根据字典翻译一个向量【包子】从excel读取数据到R的问题
相关话题的讨论汇总
话题: dat话题: outer话题: ff话题: fun话题: apply
进入Statistics版参与讨论
1 (共1页)
f***a
发帖数: 329
1
Anyone has any idea? I have been facing such problems. Thanks! :)
#data set
dat <- matrix(1:10,,2)
colnames(dat) <- letters[1:2]
F <- function(a,b){a+b}
outer(1:2,4:6,F) #wokring
apply(dat,1,F) #not working. how to fix?
x <- 1:5
FF <- function(a,b){ sum(a*x+b) }
outer(1:2,4:6,FF)#not working. why? how to fix?
s*****n
发帖数: 2174
2

看报错的信息, FUN要求以dat的每一个行作为input, 你定义的F要求两个input, 当然
不行了. 如果是为了求和的话
apply(dat,1,sum)
报错是肯定的 FUN 要求是
'FUN' must be a function (or the name of it) which expects at
least two arguments and which operates elementwise.
你定义的FF 是以向量形式运算的. 解决的办法是人为elementize, 比如:
> x <- 1:5
> FF1 <- function(a,b){
+ lapply(seq(along=a), function(t) sum(a[t] * x + b[t]))
+ }
> outer(1:2,4:6,FF1)
[,1] [,2] [,3]
[1,] 35 40 45
[2,] 50 55 60
这个 FF1 和你那个 FF 的区别是, FF1 是 elementwise 的, 而你的FF
是vectorwise的.

【在 f***a 的大作中提到】
: Anyone has any idea? I have been facing such problems. Thanks! :)
: #data set
: dat <- matrix(1:10,,2)
: colnames(dat) <- letters[1:2]
: F <- function(a,b){a+b}
: outer(1:2,4:6,F) #wokring
: apply(dat,1,F) #not working. how to fix?
: x <- 1:5
: FF <- function(a,b){ sum(a*x+b) }
: outer(1:2,4:6,FF)#not working. why? how to fix?

f***a
发帖数: 329
3
看报错的信息, FUN要求以dat的每一个行作为input, 你定义的F要求两个input, 当然
不行了. 如果是为了求和的话
apply(dat,1,sum)
~~~~~~~~~~~~~~~~~~~~~~
不是为了求和,这只是个例子。就是FUN在这种有两column的input的情况下我不知道该
怎么办算方便。用for循环太慢了吧,能不能用apply实现呢?
报错是肯定的 FUN 要求是
'FUN' must be a function (or the name of it) which expects at
least two arguments and which operates elementwise.
你定义的FF 是以向量形式运算的. 解决的办法是人为elementize, 比如:
> x <- 1:5
> FF1 <- function(a,b){
+ lapply(seq(along=a), function(t) sum(a[t] * x + b[t]))
+ }
> outer(1:2,4:6,FF1)
[,1] [,2] [,3]
[1,] 35 40 45
s*****n
发帖数: 2174
4
第一个问题, 可以用apply实现. 但你要确定F的参数只有一个, 这个参数在实际操作中就是矩阵的每一行. 比如下面这个例子
dat <- matrix(1:10,,2)
colnames(dat) <- letters[1:2]
F <- function(t){t[1] + t[2]}
apply(dat,1,F)
注意定义的是 F(t), 而不是 F(t[1], t[2]).
seq(along=a) 在这里不是1, 而是6. 如果你觉得是1, 说明你没有理解outer的工作原理. outer(a, b, FUN) 的执行原理, 是先把a, b 做成相应的矩阵(本质还是向量)A, B, 然后一起传给FUN. FUN要对A和B的对应元素进行操作. 这里
a 是 (1,2), b是(4,5,6). 传递给FUN的分别是(1,2,1,2,1,2)和(4,4,5,5,6,6)
你定义的FF, 是把A和B看作向量来和x进行操作的, R会认为需要把一个长度为6的向量和一个长度为5的向量相乘, 然后再和一个长度为6的向量相加, 所以报错.
下面的例子可能能对你的理解有帮助:
x <- 1:5
f***a
发帖数: 329
5
非常感谢您的指导啊!我慢慢研究,呵呵~ :D
1 (共1页)
进入Statistics版参与讨论
相关主题
【包子】从excel读取数据到R的问题再问R的问题 - 关于matrix 的operation
用R出现怪问题。怎样用apply对多种endpoint构建linear model
SAS 中 proc iml 怎么生成data file?【欢迎进来讨论】for loop in R
关于处理两个csv文件交集和子集的问题[R]有没有函数:根据字典翻译一个向量
有什么R function 可以推荐?请教一个R的问题(function)
请问R里apply和sapply有什么区别R help: matrix and vector operation
如何在R里面对一整列数据进行操作?R function 求和问题
R help[R] How to apply "apply" here?
相关话题的讨论汇总
话题: dat话题: outer话题: ff话题: fun话题: apply