楼主: cbw1243
35304 504

[问答] 接受各种R语言难题   [推广有奖]

51
cbw1243 发表于 2016-6-30 13:34:50 |只看作者 |坛友微信交流群
八神小弟 发表于 2016-6-30 13:11
程序如下
y
如果我对你的意图理解正确的话。以下能解决你的问题。

y<-rnorm(5,0,1)
d<-diag(c(1,2,3,4,5))
f<-function(i,u)
{ y <- get('y', envir = .GlobalEnv)  #avoid confused input
  d[i,i]^2*(y-mean(y))/(d[i,i]+u)}

u <- 2
test <- sapply(1:5, function(i) f(i,u)) #return result for each iteration in matrix
colSums(test) #sum column

使用道具

52
cbw1243 发表于 2016-6-30 13:36:01 |只看作者 |坛友微信交流群
秦时明月GF 发表于 2016-6-30 11:01
试了不能下载rcom包,能远程操作一下么
抱歉,不方便提供这种帮助。

使用道具

cbw1243 发表于 2016-6-29 23:00
你的第一个在list里的vector 有四个值,剩下的两个有三个。
合并成dataframe时要将他们的length保持一致 ...
原因我知道的,怎么样用空白补充,而不是循环重复补充内容

使用道具

54
三味书生 发表于 2016-6-30 14:02:26 |只看作者 |坛友微信交流群
三味书生 发表于 2016-6-30 08:21
就像举例描述中所说,将一批重要度不同,彼此之间又相互关联的商品放到不同的货架上,让每次去取货尽可能 ...
楼主,这问题有好办法解决吗?

使用道具

55
八神小弟 发表于 2016-6-30 14:10:37 |只看作者 |坛友微信交流群
cbw1243 发表于 2016-6-30 13:34
如果我对你的意图理解正确的话。以下能解决你的问题。

y
谢谢您的解答
d[i,i]^2*(y-mean(y))/(d[i,i]+u)}这里面的y-mean(y)原来是y-mean(y)
这样的话对于test应该是一个列向量,而不是矩阵了。
我的目标是想用一个函数g(u)表示对f(i,u)求和
这样我就能快速算出这个函数在u的一个区间上的最值,并求出u取何值时g(u)取最值
所以我的关键问题就是想简单的表示出f(i,u)对 i 求和的这个和函数

使用道具

56
dengwei715 发表于 2016-6-30 18:01:15 |只看作者 |坛友微信交流群
LZ, 你好, 我从SQL转过来学习R,遇到一个 叉乘表 的问题,很烦躁,好几天了搞不定,求教。
比如:
library(sqldf)
sqldf("select gear, carb, count(1) as n from mtcars group by gear, carb")
生成一个gear, carb的 交叉列联表,
但用R去写的时候
data.frame(table(mtcars$gear, mtcars$carb))
生成的列联表没有列名,郁闷坏了,求助啊。 怎么实现类似SQL的那种结果?

使用道具

57
cbw1243 发表于 2016-6-30 22:20:50 |只看作者 |坛友微信交流群
三味书生 发表于 2016-6-30 08:21
就像举例描述中所说,将一批重要度不同,彼此之间又相互关联的商品放到不同的货架上,让每次去取货尽可能 ...
解决这个问题的关键是用数学表达,或者叫model set-up。
重要度是weight,客人购买是demand,然后你要提供supply,保证supply>=demand。
这应该不是很难的建模。只要把数据具体化,就是很好解决的linear programming问题。
用excel都能解决。

使用道具

58
cbw1243 发表于 2016-6-30 22:23:56 |只看作者 |坛友微信交流群
太阳之子追梦者 发表于 2016-6-30 14:01
原因我知道的,怎么样用空白补充,而不是循环重复补充内容
补充空白可以把没有对应的值设为NA
比如test <- c('a','b','c')
test <- append(test, 'NA') 或者 test <- c(test, 'NA')

使用道具

59
cbw1243 发表于 2016-6-30 22:32:59 |只看作者 |坛友微信交流群
八神小弟 发表于 2016-6-30 14:10
谢谢您的解答
d^2*(y-mean(y))/(d+u)}这里面的y-mean(y)原来是y-mean(y)
这样的话对于test应该是 ...
解决的思路是这样的。先不要急着求和,而是把每一个f(i,u)的值计算并保存下来。
apply类函数就是解决这个问题。我给你写的sapply(1:5, function (i) f(i,u))就是返回的是每一个 f(i,u) 的结果。
最后你再对这些返回的值进行下一步的计算,比如sum。
我可能还没有完全理解你的意图,但是思路就是这样。

R语言的特点就是占用内存,跟C++一样。你每一次循环的值R都会记录,所以用apply类函数会提高速度,提前把空间大小占用告诉R。用for循环R每次都茫然会有多大的空间,所以尽量不要用for,尤其是当你要把函数用到大数据。

使用道具

60
cbw1243 发表于 2016-6-30 22:40:14 |只看作者 |坛友微信交流群
dengwei715 发表于 2016-6-30 18:01
LZ, 你好, 我从SQL转过来学习R,遇到一个 叉乘表 的问题,很烦躁,好几天了搞不定,求教。
比如:
libr ...
Welcome to R!
我发现好多user来到R,其实都不太习惯R的简单,哈哈。S语言的特质就是浅显易懂,相信你的郁闷会越来越少。
Anyway,解决方式是,给你的object设一个名字,以便在R enviroment里存储并进行manipulate

test <- sqldf("select gear, carb, count(1) as n from mtcars group by gear, carb")

test返回的就是dataframe,也有你需要的列名。
FYI,设定列名的方式是colnames(test) <- c('bla','bla') (这里你不需要再设,因为返回的就有。)

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 13:07